首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二层指针做函数参数,为什么不能把数组地址直接传入?该怎么解决

2012-03-22 
二层指针做函数参数,为什么不能把数组地址直接传入?22 void fun(char **p)23 {24// *p abc25strcpy(*p

二层指针做函数参数,为什么不能把数组地址直接传入?
22 void fun(char **p)
 23 {
 24 // *p= "abc";
 25 strcpy(*p,"abc" );
 26 printf("%x, %x, %x\n", **p, *p, p);
 27 }
 28 int main()
 29 {
 30 char a[4];
 31 char *q;
 32 memset(a,0,4);
 33 q=a;
 34 fun(&q);
 35 printf("%s, %x, %x\n", q,q,&q);
 36 printf("%s, %x\n",a,a);
 37 return 0;
 38 }
~

jzhang@lyra:~/test> ./test
61, bfc3fcd0, bfc3fccc
abc, bfc3fcd0, bfc3fccc
abc, bfc3fcd0



 22 void fun(char **p)
 23 {
 24 // *p= "abc";
 25 strcpy(*p,"abc" );
 26 printf("%x, %x, %x\n", **p, *p, p);
 27 }
 28 int main()
 29 {
 30 char a[4];
 31 char *q;
 32 memset(a,0,4);
 33 q=a;
 34 fun(&a);
 35 printf("%s, %x, %x\n", q,q,&q);
 36 printf("%s, %x\n",a,a);
 37 return 0;
 38 }

jzhang@lyra:~/test> ./test
Segmentation fault




[解决办法]
指向数组的指针是int (*)[4]不是char **
[解决办法]
类型不一样···
[解决办法]
这个问题主要是数组a的地址,你可以尝试下,打印出a和&a的值其实是一样的,都是0,然后你传进fun中,给*a赋值,其实是给内存为0的地址赋值,结果是有问题的。这个主要是数组首地址与数组地址的问题。

热点排行