您的位置:首页 > 其它

指针数组做参

2013-11-02 22:29 211 查看
//由于之前学指针没有学好,这几天做实验的时候,一直纠结在指针数组上,最后终于弄懂了。现做个小总结
//直接贴上例子

//声明一个指针数组ap1,并将其初始化,声明指针数组ap2,通过传递ap1和ap2,将ap2中的每个元素指向ap1中对应每个元素指向的堆空间


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void exchange(char *Ap1[],char* Ap2[],int size){

int i;
for(i=0;i<size;i++){

Ap2[i]=Ap1[i];
}

}
void print_ap(char* ap1[],char* ap2[], int size)
{
int i=0;
for(;i<size;i++){
printf(ap1[i]);
printf("\t");
printf(ap2[i]);
printf("\n");
}
}

int main(){

char* ap1[5]={"I","AM","A","FRESHMAN","!"};
char* ap2[5];
int flag;
int i=0;
exchange(ap1,ap2,5);
print_ap(ap1,ap2,5);

}


通过debug发现



对于ap1指针数组来讲

ap1这个数组的地址是0x0018FF34

因为这是一个指针数组,这个数组里边存了很多指针,这些指针指向了

ap1[0]指向了0x0042203C I

ap1[1]指向了0x00422038 AM

ap1[2]指向了0x00422034 A

ap1[3]指向了0x00422028 FRESHMAN

ap1[4]指向了0x00422024 !

PS:看来动态分配也遵循字节对齐方式,但为什么地址也是从高位到地位呢,也是跟压栈有关?

在exchange(ap1,ap2,5)的时候,传递的参数是指针数组ap1的地址0x0018FF34,不能够写成exchange(&ap1,&ap2[],5)

引用数组指针跟引用数组元素是一样的。。

我在做这个的时候,一直把指针的指针和指针数组搞混了,我觉得指针的指针也可以用到指针数组上面去,但是经过很多次的实验,一直没有弄成功,或者说其实就是不能够将其用在这里边来。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: