为了账号安全,请及时绑定邮箱和手机立即绑定

我是如下这么调用的啊:为什么ret一直是0啊?

我是如下这么调用的啊:为什么ret一直是0啊?

慕的地6264312 2022-09-16 18:14:57
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整形数据,会丢弃掉小数点后面的数据

查看完整回答
反对 回复 2022-09-21
?
白衣非少年

TA贡献1155条经验 获得超0个赞

你可能还不是很了解,参数传递的形式,值传递,地址传递,引用传递(c++特性),而数组的传递形式就是一个地址传递,那么array的大小是4,他是一个指针,楼上说的很对。a[0]就等于是a+0,也指向的第一片地址,你第一片地址内有两个int类型数据,所以是8,。那么4/8都是整形,结果就整形,也就是0.

查看完整回答
反对 回复 2022-09-21
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

sizeof 关键字不会动态计算目标大小。 它依据的编译器在编译过程中计算出来的值。
而形参本身接受调用者传来的值,过程是动态的,这个在编译阶段是不可知的。

查看完整回答
反对 回复 2022-09-21
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信