char*ptr;chararr[10];sizeof(ptr)=4;sizeof(arr)=10;请问是如何计算数组大小的?这里只是把地址传给sizeof啊
2 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
严格讲,sizeof(arr)=10;这里只是把地址传给sizeof啊你这句话是错误的,你传的是数组名,数组名不等价于地址。编译器用数组名标记数组的属性,比如具有确定数量的元素。而你说的地址,也就是指针,只是一个标量值。只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。而只有以下两种情况,才不被当做指针常量:sizeof(数组名):返回数组长度(所占的字节数,不是数组元素个数),而不是指向数组的指针的长度。&数组名:产生一个指向数组的指针,而不是一个指向某个指针常量的指针。以上内容来源:《C和指针》P141~142
浮云间
TA贡献1829条经验 获得超4个赞
sizeof不是函数,而是编译器提供的操作符,由编译器计算并返回一个数据结构的大小。在这里,编译器知道arr的大小(否则它怎么为其分配内存呢?),所以能够返回正确的结果10。
添加回答
举报
0/150
提交
取消