最近在看林锐博士的高质量c/c++编程指南,在书的后面附了一张测试的卷子,做了一下,发现自己很多都是处于半懂半不懂得阶段,比如下面这道关于sizeof的题目:
1、void Func ( char str[100]) { 请计算 sizeof( str ) = 4 (2 分) }
2、char str[100 ] = {0} ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 100 (2 分) sizeof ( p ) = 4 (2 分) sizeof ( n ) = 4 (2 分)
3、void *p = malloc( 100 ); 请计算 sizeof ( p ) = 4 (2 分)
其实大部分还是很好理解的,但是对于1、和2中的第一小问我刚开始被纳闷到了,同样都是对数组的首地址取sizeof,怎么会两者截然不同,开始我还怀疑林锐博士的书出错了,自己编了个小程序果然如此,在网上查了一下资料,得到结果如下:
Char str[100];
当数组名作为参数传递时,会退化为指同类型的指针! 也就是说此事在1、中的str已经只是一个地址了,所以当然是4了,这也是为什么我们传递数组的时候除了给他首地址还要给它数组的大小的缘故。
|