C语言一个小小的问题引起的对指针的探究。。。
废话不多说。下面是这个大家认识的一个及其简单的程序:
1 #include <stdio.h> 2 void A(int a[]) 3 { 4 printf("%d/t", sizeof(a)); 5 } 6 int main() 7 { 8 int a[512]; 9 int *p; 10 printf("%d/t", sizeof(a)); 11 A(a); 12 printf("%d/n", sizeof(p)); 13 return 0; 14 }
这个程序大家先看一遍再拿到编译器里运行调试,发现什么了没?输出的是512 4(2) 4(2)。 我今天下午查了些资料,才知道了,原来是自己基础没掌握好,现在我就来解释下:
第一个输出512,是因为它是一个数组,所以输出了整个数组所站的总共的内存字长大小。但为什么后面输出的是4呢???原来啊,编译器在对数组进行地址参数传递的时候,复制了内存地址,结果就使得数组直接变成指针了。。就是这个原因~但为什么输出的是4(2)呢???呵呵,这个就是指针的构成了,其实所有的指针都只是一个无符号的整形数。。我的编译环境是32位的linux。处理器寻址能力为2^32-1,相当于就是站了4个字节空间的大小。但在DOS(TC)环境下编译,由于dos是16位的,所以就只输出的2咯~~
posted on 2012-06-02 08:59 依旧涛 阅读(...) 评论(...) 编辑 收藏