long array[][2]={1,2,3,4,5,6,7,8};//很明显4行int ret=length(array);long length(long array[][N]) /*宏N*/{if(sizeof(array[0])==0)return 0;elsereturn sizeof(array)/sizeof(array[0]);}
3 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
return sizeof(array)值为4
sizeof(array[0])值为8,
返回值为0.5
你用int接受,难道希望他返回0.5么?
当然是0了,int整形数据,会丢弃掉小数点后面的数据
白衣非少年
TA贡献1155条经验 获得超0个赞
你可能还不是很了解,参数传递的形式,值传递,地址传递,引用传递(c++特性),而数组的传递形式就是一个地址传递,那么array的大小是4,他是一个指针,楼上说的很对。a[0]就等于是a+0,也指向的第一片地址,你第一片地址内有两个int类型数据,所以是8,。那么4/8都是整形,结果就整形,也就是0.
慕妹3242003
TA贡献1824条经验 获得超6个赞
sizeof 关键字不会动态计算目标大小。 它依据的编译器在编译过程中计算出来的值。
而形参本身接受调用者传来的值,过程是动态的,这个在编译阶段是不可知的。
- 3 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消