关于"C语言深度辨析"这本书的一个疑问
关于"C语言深度剖析"这本书的一个疑问
说疑问可能不合适,其实就是里面的一个例子没看懂,用vs2013调试过之后,现在已经懵了,求指教。
运行结果为 4 20
调试发现szeof(b)中的b代表int b[5],这个我知道一点,关于数组名什么时候代表数组首地址,什么时候代表数组首元素地址,很混乱。sizeof(a)中的a代表int *a,这个很不理解。
------解决思路----------------------
不如去看《c专家编程》
------解决思路----------------------
数组作为参数传递会弱化为指针,如果是放到sizeof运算符中,因为sizeof不会进行求值运算,只会推导表达式最后的类型,所以导致这样的结果
说疑问可能不合适,其实就是里面的一个例子没看懂,用vs2013调试过之后,现在已经懵了,求指教。
#include <stdio.h>
void fun(int a[5]){
printf("%d", sizeof(a));
}
int main(){
int b[5] = { 1, 2, 3, 4, 5 };
fun(b);
printf("\n%d", sizeof(b));
return 0;
}
运行结果为 4 20
调试发现szeof(b)中的b代表int b[5],这个我知道一点,关于数组名什么时候代表数组首地址,什么时候代表数组首元素地址,很混乱。sizeof(a)中的a代表int *a,这个很不理解。
------解决思路----------------------
不如去看《c专家编程》
------解决思路----------------------
数组作为参数传递会弱化为指针,如果是放到sizeof运算符中,因为sizeof不会进行求值运算,只会推导表达式最后的类型,所以导致这样的结果