void fun1(char ca[])
{
printf("fun1:%d,%d,%d,%x,%d\n",ca,&ca,&(ca[0]),ca[4],sizeof(ca));
}
void fun2(char *pa)
{
printf("fun2:%d,%d,%d,%x,%d\n",pa,&pa,&(pa[0]),pa[4],sizeof(pa));
}
main(){
char ca[5]="abcde";
printf("main:%d,%d,%d,%x,%d\n",ca,&ca,&(ca[0]),ca[4],sizeof(ca));
fun1(ca);
fun2(ca);
}
在C中当数组作为参数传递给函数时,数组已一致转换成指针类型,拿这个代码当测试
aax@aax-desktop:~/桌面/test$ ./fun_test
main:-1074369409,-1074369409,-1074369409,65,5
fun1:-1074369409,-1074369456,-1074369409,65,4
fun2:-1074369409,-1074369456,-1074369409,65,4
从结果中可以看到,在main函数里,字符数组ca一直指向的是数组首元素的地址,也就是说ca,&ca打印出的都是数组首元素地址。而当数组当做参数传递给函数是,打印出来的东西变了。
这是因为在函数里数组已经转换成指针类型。
在fun1里,ca打印的是指针指向数组的地址,还是原来数组首元素,而&ca则打印的是指针本身的地址。在这里它同fun2的指针类型一模一样。
同理,sizeof在函数里也失效了。

没有评论:
发表评论