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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C中是否有一個(gè)標(biāo)準(zhǔn)函數(shù)可以返回?cái)?shù)組的長度?

C中是否有一個(gè)標(biāo)準(zhǔn)函數(shù)可以返回?cái)?shù)組的長度?

C
繁花不似錦 2019-09-02 15:49:51
C中是否有一個(gè)標(biāo)準(zhǔn)函數(shù)可以返回?cái)?shù)組的長度?
查看完整描述

3 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

通常,在其他答案中描述的技術(shù)被封裝在宏中以使其更容易在眼睛上。就像是:


#define COUNT_OF( arr) (sizeof(arr)/sizeof(0[arr]))

請(qǐng)注意,上面的宏使用了一個(gè)小技巧,即將數(shù)組名稱放在索引運(yùn)算符(' []')中而不是0- 如果宏在C ++代碼中錯(cuò)誤地使用了一個(gè)重載項(xiàng),則會(huì)這樣做operator[]()。編譯器會(huì)抱怨而不是給出錯(cuò)誤的結(jié)果。


但是,請(qǐng)注意,如果您碰巧傳遞指針而不是數(shù)組,宏將默默地給出錯(cuò)誤的結(jié)果 - 這是使用此技術(shù)的主要問題之一。


我最近開始使用我從Google Chromium的代碼庫中竊取的更復(fù)雜的版本:


#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))

在這個(gè)版本中,如果指針被錯(cuò)誤地作為參數(shù)傳遞,編譯器會(huì)在某些情況下抱怨 - 特別是如果指針的大小不能被指針?biāo)赶虻膶?duì)象的大小整除。在這種情況下,除零將導(dǎo)致編譯器出錯(cuò)。實(shí)際上至少有一個(gè)我用過的編譯器給出了一個(gè)警告而不是一個(gè)錯(cuò)誤 - 我不確定它為那個(gè)除以零的表達(dá)式生成了什么。


那個(gè)宏沒有關(guān)閉錯(cuò)誤地使用它的大門,但是它就像我在直接看到的那樣接近。


如果您想在C ++中工作時(shí)使用更安全的解決方案,請(qǐng)查看Compile time sizeof_array,而不使用描述Microsoft使用的相當(dāng)復(fù)雜的基于模板的方法的宏winnt.h。


查看完整回答
反對(duì) 回復(fù) 2019-09-02
?
SMILET

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

不,那里沒有。


對(duì)于常量大小的數(shù)組,你可以使用Andrew提到的常用技巧,sizeof(array) / sizeof(array[0])但這只適用于聲明數(shù)組的范圍。

sizeof(array)給出整個(gè)數(shù)組sizeof(array[0])的大小,同時(shí)給出第一個(gè)元素的大小。

請(qǐng)參閱Michaels關(guān)于如何將其包裝在宏中的答案。


對(duì)于動(dòng)態(tài)分配的數(shù)組,您可以跟蹤整數(shù)類型的大小,或者在可能的情況下使其以0結(jié)尾(即分配1個(gè)元素并將最后一個(gè)元素設(shè)置為0)。


查看完整回答
反對(duì) 回復(fù) 2019-09-02
?
繁星coding

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

數(shù)組中的元素?cái)?shù)量x可以通過以下方式獲得:


sizeof(x)/sizeof(x[0])

您需要注意,數(shù)組在傳遞給函數(shù)時(shí)會(huì)降級(jí)為不帶大小信息的指針。實(shí)際上,大小信息永遠(yuǎn)不可用于運(yùn)行時(shí),因?yàn)樗窃诰幾g時(shí)計(jì)算的,但是您可以在數(shù)組可見的情況下(即,它尚未降級(jí)的情況下)可用。


當(dāng)我將數(shù)組傳遞給我需要作為數(shù)組處理的函數(shù)時(shí),我總是確保傳遞兩個(gè)參數(shù):


陣列的長度; 和

指向數(shù)組的指針。

因此,雖然可以將數(shù)組視為聲明它的數(shù)組,但它在其他地方被視為大小和指針。


我傾向于使用以下代碼:


#define countof(x) (sizeof(x)/sizeof(x[0]))

: : :

int numbers[10];

a = fn (countof(numbers),numbers);

然后fn()將獲得它的大小信息。


我過去使用的另一個(gè)技巧(在我看來有點(diǎn)混亂,但我會(huì)在這里給它完整性)是有一個(gè)聯(lián)合數(shù)組并使第一個(gè)元素成為長度,如:


typedef union {

    int len;

    float number;

} tNumber;

tNumber number[10];

: : :

number[0].len = 5;

a = fn (number);

然后fn()可以訪問長度和所有元素,你不必?fù)?dān)心數(shù)組/指針二分法。


這具有允許長度變化的附加優(yōu)點(diǎn)(即,使用中的元素的數(shù)量,而不是分配的單元的數(shù)量)。但我傾向于不再使用它,因?yàn)槲艺J(rèn)為兩個(gè)參數(shù)的數(shù)組版本(大小和數(shù)據(jù))更好。


查看完整回答
反對(duì) 回復(fù) 2019-09-02
  • 3 回答
  • 0 關(guān)注
  • 776 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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