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

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

為什么C和C+編譯器允許函數(shù)簽名中的數(shù)組長(zhǎng)度不被強(qiáng)制執(zhí)行?

為什么C和C+編譯器允許函數(shù)簽名中的數(shù)組長(zhǎng)度不被強(qiáng)制執(zhí)行?

C++ C
達(dá)令說(shuō) 2019-06-26 16:51:46
為什么C和C+編譯器允許函數(shù)簽名中的數(shù)組長(zhǎng)度不被強(qiáng)制執(zhí)行?這是我在學(xué)習(xí)期間發(fā)現(xiàn)的:#include<iostream>using namespace std;int dis(char a[1]){     int length = strlen(a);     char c = a[2];     return length;}int main(){     char b[4] = "abc";     int c = dis(b);     cout << c;     return 0;}所以在變量中int dis(char a[1]),[1]似乎什么也不做因?yàn)槲铱梢杂胊[2]..就像int a[]或char *a..我知道數(shù)組名是一個(gè)指針,以及如何傳遞數(shù)組,所以我的困惑不是關(guān)于這個(gè)部分。我想知道的是編譯器為什么允許這種行為(int a[1])?;蛘咚€有其他我不知道的意思?
查看完整描述

4 回答

?
onemoo

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

語(yǔ)法設(shè)計(jì)上如此,編譯器自然也要遵循這一規(guī)則了。

在使用中記住這一點(diǎn)就好了。? 如果你一定要知道為什么當(dāng)年 K&R 要設(shè)計(jì)成這樣,那么...我也不知道。 不過(guò)從另一個(gè)角度想,為避免對(duì)數(shù)組參數(shù)額外的壓棧開(kāi)銷(xiāo),函數(shù)對(duì)數(shù)組參數(shù)的訪問(wèn)幾乎都是以額外尋址的方式實(shí)現(xiàn)的,所以這樣的設(shè)計(jì)從工程師角度來(lái)看是更符合直覺(jué)的。C語(yǔ)言本來(lái)就是源于工程實(shí)踐的,也許這也是原因之一吧(猜)。

當(dāng)然,有時(shí)候我們希望傳遞數(shù)組,并且希望函數(shù)對(duì)數(shù)組的訪問(wèn)不要越界。但因?yàn)?C 語(yǔ)言有這樣的特性,所以很多函數(shù)在數(shù)組參數(shù)后還設(shè)計(jì)了一個(gè)整型參數(shù)。我想你應(yīng)該能夠猜到這個(gè)整型參數(shù)是做什么用的。對(duì)!就是讓用戶傳入數(shù)組的大小,這樣至少能讓函數(shù)知道傳入的數(shù)組有多大(以避免訪問(wèn)越界等)。


另外,C99 標(biāo)準(zhǔn)新增加了額外的語(yǔ)法,可以在聲明函數(shù)時(shí)允許用戶限定數(shù)組參數(shù)的最小容量。

語(yǔ)法示例: int func(int a[static 10]);

關(guān)鍵就是那個(gè) static,這樣限定傳入的數(shù)組必須至少能容納 10 個(gè)元素。

PS. 這個(gè)新語(yǔ)法似乎用的不多,大家已經(jīng)習(xí)慣了老方法。

PPS. 注意,C++ 并沒(méi)有這個(gè)新用法。并且再?gòu)?qiáng)調(diào)下,盡管看起來(lái)很像,但一定要把 C 和 C++ 看作是兩門(mén)不同的語(yǔ)言。C++ 看似像 C 的部分在語(yǔ)法上和 C 有著很多微妙的差異。

PPPS. 我怎么感覺(jué)前面幾個(gè)回答都是機(jī)翻呢...


查看完整回答
反對(duì) 回復(fù) 2019-06-27
?
鴻蒙傳說(shuō)

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

這是將數(shù)組傳遞給函數(shù)的語(yǔ)法的一個(gè)怪癖。

實(shí)際上,在C中傳遞數(shù)組是不可能的。如果您編寫(xiě)的語(yǔ)法看起來(lái)應(yīng)該傳遞數(shù)組,那么實(shí)際發(fā)生的情況是傳遞一個(gè)指向數(shù)組第一個(gè)元素的指針。

由于指針不包含任何長(zhǎng)度信息,因此[]在函數(shù)中,形式參數(shù)列表實(shí)際上被忽略了。


查看完整回答
反對(duì) 回復(fù) 2019-06-26
  • 4 回答
  • 0 關(guān)注
  • 794 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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