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

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;
else
return sizeof(array)/sizeof(array[0]);
}

慕的地6264312
浏览 166回答 3
3回答

翻阅古今

return sizeof(array)值为4sizeof(array[0])值为8,返回值为0.5你用int接受,难道希望他返回0.5么?当然是0了,int整形数据,会丢弃掉小数点后面的数据

白衣非少年

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

慕妹3242003

sizeof 关键字不会动态计算目标大小。 它依据的编译器在编译过程中计算出来的值。而形参本身接受调用者传来的值,过程是动态的,这个在编译阶段是不可知的。
打开App,查看更多内容
随时随地看视频慕课网APP