读书人

二层指针做函数参数为什么不能把数组

发布时间: 2012-03-22 17:43:57 作者: rapoo

二层指针做函数参数,为什么不能把数组地址直接传入?
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的地址赋值,结果是有问题的。这个主要是数组首地址与数组地址的问题。

读书人网 >C语言

热点推荐