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 關注
- 229 瀏覽