{eval=Array;=+count(Array);}

成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

問答專欄Q & A COLUMN

C語言學(xué)到數(shù)組了,感覺有點難,你能舉例子說說數(shù)組怎么用嗎?使用數(shù)組要注意什么嗎?

BlackFlagBinBlackFlagBin 回答0 收藏1
收藏問題

5條回答

YacaToy

YacaToy

回答于2022-06-28 11:47

謝邀。

C語言已經(jīng)是非常簡潔的編程語言了,數(shù)組肯定不是多余的語法了??梢哉f,數(shù)組基本上是所有現(xiàn)代高級編程語言不可或缺的語法了。但是C語言中的數(shù)組并不難,題主也不用太擔(dān)心自己學(xué)不會。

我的上一個回答,討論了C語言中的結(jié)構(gòu)體,它是一種復(fù)合數(shù)據(jù)類型,有了結(jié)構(gòu)體,C語言可以應(yīng)對各種復(fù)雜的數(shù)據(jù)模型,比如上一節(jié)的平行四邊形問題。

但是有些問題,就算是結(jié)構(gòu)體,也很難解決。請看下面這個問題:

小明班級有 60 個人,期末考試出成績后,編寫C語言程序找出這 60 個人的最高得分。

這當(dāng)然不是什么難題,會判斷兩個數(shù)的大小就能解決這個問題。只不過,這 60 個人的成績怎么用 C 語言描述呢?定義 60 個變量?這樣是不是太麻煩了?就算不嫌麻煩,比較兩個數(shù)大小的邏輯怎么寫呢,每兩個變量就得寫一個 if ?

這時C語言的數(shù)組就很好用了

和結(jié)構(gòu)體類似,數(shù)組也是一種復(fù)合數(shù)據(jù)類型,只不過,數(shù)組是由一系列相同類型的元素組成的。比如上面 60 人的成績得分,每一個人的得分在C語言中都可以用 float 來定義,屬于同一數(shù)據(jù)類型,所以這 60 個人的成績得分,在C語言中可以定義為:

float score[60];

score 后面的 [60] 表示一共有 60 個 score 這樣的(即 float 類型的)數(shù)據(jù),所以 60 個同學(xué)的成績得分,C語言程序定義這么一個數(shù)組就可以了,并不需要定義多個變量。如果人數(shù)更多,把 60 改大些就可以解決。

請看上圖,我們用方框表示數(shù)組的存儲單元(元素),一系列方框在一起組成了數(shù)組。方框里面的數(shù)字是成績得分,方框外面的數(shù)字是數(shù)組的下標(biāo),每個存儲單元可以用數(shù)組名+下標(biāo)訪問:score[0],score[1],score[28] 等等。

注意,在定義數(shù)組時,float score[60]; 這里的 60 表示數(shù)組長度,而在訪問時, score[60] 這里的 60 是指 score 數(shù)組的第 60 個元素。

和我們平常數(shù)數(shù)不同,數(shù)組元素是從“第0個”開始數(shù)的,大多數(shù)編程語言都是這么規(guī)定的。這樣規(guī)定使得訪問數(shù)組元素非常方便,比如 score 數(shù)組中的每個元素占 4 個字節(jié),則 score[i] 位于從數(shù)組開頭跳過 4 * i 個字節(jié)的存儲位置。score[i] 也可以做左值,i 也可以是表達(dá)式:

只要確保下標(biāo)都是整數(shù),這些都是合法的。

數(shù)組的初始化結(jié)構(gòu)體相似,例如:

float score[60] = {68.0, 84.2, };

如果定義數(shù)組同時初始化它,可以不指定數(shù)組長度,例如:

float score[] = {68.0, 84.2, 77.7};

這時,編譯器會根據(jù)初始化信息確定 score 數(shù)組的長度為 3。不過,結(jié)構(gòu)體可以互相賦值,數(shù)組卻不能互相賦值:

既然數(shù)組不能互相賦值,也就不能用數(shù)組類型作為函數(shù)的返回值。這部分內(nèi)容,可能需要討論到指針,鑒于題主才學(xué)到數(shù)組,就不展開討論了。

使用C語言數(shù)組解決上述問題

好了,說了這么多,來看一個實例吧,我們使用C語言數(shù)組來記錄小明班同學(xué)成績,然后找到最高的成績得分:

例子只使用了 6 個成績做演示,原理是通的,編譯并執(zhí)行上面這段C語言程序,發(fā)現(xiàn)找到最高成績了。

使用C語言數(shù)組注意事項

使用數(shù)組下標(biāo)不能超出數(shù)組的長度范圍,這一點在使用變量做數(shù)組下標(biāo)時尤其要注意。C語言編譯器并不檢查 score[-1] 或是 score[100] 這樣的訪問越界錯誤,編譯時能順利通過,運行時卻會出錯。

有時候這種錯誤很隱蔽,發(fā)生訪問越界時程序可能并不會立即崩潰,而執(zhí)行到后面某個正確的語句時卻有可能突然崩潰。所以,從一開始寫代碼時就要小心避免出問題,事后依靠調(diào)試來解決問題的成本是很高的。

為什么C語言編譯器對這么明顯的錯誤都不做處理?

理由一,這種錯誤并不總是顯而易見的,如果題主學(xué)了指針,就會發(fā)現(xiàn)指針指向數(shù)組的什么位置只有運行時才知道,編譯時無法檢查是否越界,而運行時檢查數(shù)組訪問越界會影響性能,C語言是極其重視效率的編程語言,所以干脆不檢查了;

理由二, C99 Rationale 指出,C語言的設(shè)計精神是:相信每個C程序員都是高手,不要阻止程序員去干他們需要干的事,高手們使用count[-1]這種技巧其實并不少見,不能當(dāng)作錯誤。

歡迎在評論區(qū)一起討論,質(zhì)疑。文章都是手打原創(chuàng),每天最淺顯的介紹C語言、linux等嵌入式開發(fā),喜歡我的文章就關(guān)注一波吧,可以看到最新更新和之前的文章哦。

評論0 贊同0
  •  加載中...
468122151

468122151

回答于2022-06-28 11:47

以我的經(jīng)驗,既然是c語言的數(shù)組,那么他肯定要包含很多指針操作。所以我建議先學(xué)習(xí)計算機(jī)原理。搞清楚,計算機(jī)如何存儲對象,變量等。棧區(qū),堆區(qū),連續(xù)存儲和鏈?zhǔn)酱鎯Α?/p>

理解了這些,你就會理解,數(shù)組是一段連續(xù)存儲空間。每個下標(biāo)值代表偏移一個單位,也就是地址增加一個數(shù)組類型的所占空間大小。

其實,這些原理符合所有語言特性。你必須理解,一個對象或者結(jié)構(gòu)體,就是一段連續(xù)的存儲空間,如果程序需要訪問他,就要拿到他的首地址,然后通過偏移去依次訪問其成員。這里的首地址有時是對象指針,有時是數(shù)組名稱,有時用取地址符號。

評論0 贊同0
  •  加載中...
printempw

printempw

回答于2022-06-28 11:47

數(shù)組非常有用,比如在數(shù)碼管顯示的時候,把要顯示的筆畫存入數(shù)組,直接索引數(shù)組就可以了

評論0 贊同0
  •  加載中...
qujian

qujian

回答于2022-06-28 11:47

學(xué)學(xué)匯編吧,學(xué)完匯編,理解C語言的指針和數(shù)組就很easy樂

評論0 贊同0
  •  加載中...
Scliang

Scliang

回答于2022-06-28 11:47

排坐坐吃果果。kid[]=3,5,4定義兒童數(shù)組,序號0,1,2小朋友的年齡分別是3,5,4

kid[1]的值就是4

評論0 贊同0
  •  加載中...

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<