第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么sizeof(param_array)是指針的大???

我想得到一個數(shù)組的長度,比如說int array[] = {1, 2, 3, 4}。我曾經(jīng)sizeof那樣做。int length(int array[]){     return sizeof(array) / sizeof(int);}int main(){    int array[] = {1, 2, 3, 4};    printf("%d\n", length(array)); // print 1    printf("%d\n", sizeof(array) / sizeof(int)); // print 4}那么,為什么sizeof(array)in函數(shù)length返回指針大小array?但是在功能上main,它起作用。而且,如何修改length函數(shù)以獲取數(shù)組的長度?
查看完整描述

3 回答

?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗 獲得超4個贊

一條特殊的C規(guī)則表示,對于函數(shù)參數(shù),數(shù)組類型將調(diào)整為指針類型。這意味著:


int length(int array[]);


相當(dāng)于


int length(int *array);


因此,當(dāng)您計算sizeof數(shù)組時,實際上是在計算指針的大小。


(C99,6.7.5.3p7)“參數(shù)聲明為“類型數(shù)組”應(yīng)調(diào)整為“類型的合格指針”,其中類型限定符(如果有)是在數(shù)組的[和]中指定的類型推導(dǎo)。”


查看完整回答
反對 回復(fù) 2019-11-04
?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗 獲得超4個贊

正如其他答復(fù)者所指出的,聲明為采用數(shù)組的函數(shù)的編譯方式與采用指針的方式相同。


我見過的最常見的長度方法是使用#define,但是如果您使用模板玩弄技巧,則可以使函數(shù)起作用。


template <size_t _Size> inline int length(int(& array)[_Size])

{

    //return sizeof(array) / sizeof(int);

    return _Size;

};


int array[] = {1, 2, 3, 4};

printf("%d\n", length(array)); // print 4

對于長度為4的數(shù)組,此方法將被編譯為采用長度為4的數(shù)組并返回靜態(tài)4的方法。這還具有以下優(yōu)點:如果嘗試傳遞非數(shù)組的內(nèi)容,則編譯器將給出錯誤,而#define方法則沒有。


int* foo = array;

printf("%d\n", length(foo)); 

    // error C2784: 'int length(int (&)[_Size])' : could not deduce template

    //     argument for 'int (&)[_Size]' from 'int *'

    // test.cpp(56) : see declaration of 'length'


查看完整回答
反對 回復(fù) 2019-11-04
?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗 獲得超6個贊

在主程序中,編譯器知道數(shù)組的長度。在子例程中,沒有。特別地,在子例程中,type int[]的參數(shù)與type的參數(shù)相同int *。另一方面,在主程序中,array具有type int[4]。(您可以通過嘗試向arrayin 分配另一個值來進(jìn)行測試main。編譯器會抱怨。)


查看完整回答
反對 回復(fù) 2019-11-04
  • 3 回答
  • 0 關(guān)注
  • 506 瀏覽

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號