學(xué)數(shù)組穆趴,這一篇就夠了

每日一句:

傷害人的并非事件本身脸爱,而是他對(duì)事件的看法。

戴爾·卡耐基—《人性的弱點(diǎn)》


今日未妹,我們請(qǐng)來(lái)了一位老大簿废,別看他只是個(gè)人,他能裝的東西比你還要多呢络它。

老大的簡(jiǎn)介:

(array)是按順序儲(chǔ)存的一系列相同的值族檬,可以是10個(gè)char類型的字符或15個(gè)int類型的值。沒(méi)錯(cuò)化戳,這位老大便是數(shù)組导梆。這位老大還是有許多小弟的,這些小弟姓什么呢迂烁,有個(gè)專門的名字叫元素看尼。沒(méi)錯(cuò),整個(gè)數(shù)組有一個(gè)數(shù)組名盟步,通過(guò)整數(shù)下標(biāo)訪問(wèn)數(shù)組中單獨(dú)的項(xiàng)或元素(element)藏斩。

如何定義數(shù)組呢:

int?name[10];//說(shuō)明可存儲(chǔ)10個(gè)int類型整數(shù)的數(shù)組char?name[10];//說(shuō)明可存儲(chǔ)10個(gè)字符的數(shù)組

老大介紹得差不多了,那么接下來(lái)便是介紹小弟(數(shù)組里的元素)了却盘。小弟可是很厲害的呢狰域,它可以是任意數(shù)據(jù)類型哦。

我們將用于識(shí)別數(shù)組元素的數(shù)字稱為下標(biāo)(subscript),索引(indice),或偏移量(offset)黄橘。需要注意的是下標(biāo)必須是整數(shù)哦兆览,下標(biāo)中的整數(shù)也代表了數(shù)組中有多少元素,而且要從0開(kāi)始計(jì)數(shù)塞关。下標(biāo)也是存在陷阱的抬探,因?yàn)榕掠绊懙綀?zhí)行的速度,C編譯器是不會(huì)檢查數(shù)組的下標(biāo)是否正確的哦。而且數(shù)組的元素是被依次存在內(nèi)存中相鄰的位置小压。

int?name[10];//元素為name[0]~name[9]name[10]=55;//這個(gè)便是錯(cuò)的线梗,該數(shù)組元素不存在

注意:每個(gè)int為2字節(jié),char為1字節(jié)怠益。順便擴(kuò)展一下位仪搔、字,字節(jié)與KB的關(guān)系:

KB? 1KB=1024B

MB? 1MB=1024KB

GB? 1GB=1024MB

TB? 1TB=1024GB

int類型數(shù)組元素的用法和int類型變量的用法類似蜻牢,比如要讀取int類型變量name烤咧,應(yīng)該這樣寫

scanf("%d",&name);//讀取變量scanf("%d",&name[n]);//讀取數(shù)組

昨天我們運(yùn)用了許多的for循環(huán),就有小伙伴跟我說(shuō)那么多for可以獨(dú)立出來(lái)寫么抢呆,獨(dú)立的for循環(huán)我個(gè)人不建議煮嫌。將for循環(huán)合并成一個(gè)循環(huán)可以使程序顯得更加緊湊,但我們也要遵循模塊化的原理镀娶。模塊化主要是把程序劃分為一些獨(dú)立的單元,每個(gè)單元執(zhí)行一個(gè)任務(wù)揪罕,這樣也能提高程序的可讀性梯码。更重要的是模塊化使程序的不同部分彼此獨(dú)立,方便以后對(duì)程序的修改好啰。

如何能更好的提高程序的可讀性呢轩娶?見(jiàn)下:

如何全面提高程序的可讀性

當(dāng)我們定義數(shù)組后,該如何賦值呢:

int name[5]={1,2,3,4,5};int?name[5]={1,2,3,4};

我們認(rèn)真看就會(huì)發(fā)現(xiàn)第一行和第二行的差別框往,第一行將5個(gè)值賦給了name鳄抒,而第二行卻只有4個(gè)數(shù)值,那么還差一個(gè)怎么辦呢椰弊?不用怕许溅,編譯器會(huì)為它補(bǔ)上0的,但也只能補(bǔ)0哦秉版。

接下來(lái)我們就來(lái)更加詳細(xì)的介紹數(shù)組:

初始化數(shù)組

數(shù)組通常被用來(lái)存儲(chǔ)程序需要的數(shù)據(jù)贤重。比如一個(gè)內(nèi)含12個(gè)整數(shù)元素的數(shù)組就可以存儲(chǔ)12個(gè)月的天數(shù)。在這種情況下清焕,在程序一開(kāi)始就初始化數(shù)組比較好并蝗。大家知道什么是標(biāo)量變量么,簡(jiǎn)單說(shuō)就是只存儲(chǔ)單個(gè)值的變量秸妥。接下來(lái)我們來(lái)初始化這種變量:

float?flax=PI*2;/*PI已定義為宏*/

初始化數(shù)組:

int?main(){int name[5]={1,2,3,4,5};...}

如上所示滚停,我們用以逗號(hào)分隔的值列表(用花括號(hào)括起來(lái)的)來(lái)初始化數(shù)組,各值之間用逗號(hào)分隔粥惧,在逗號(hào)和值之間可以有空格键畴。上面的初始化是把1賦值給數(shù)組的首元素(即name[0])。

下面給大家展示一個(gè)簡(jiǎn)單的程序:

#include<stdio.h>int main(){?const?int?days[]={31,28,31,30,31,30,31,31,30,31};int index;for(index=0;index<sizeof?day/sizeof?days[0];index++)printf("Month?%2d?has?%d?days.\n",index+1,days[index]);return 0;}

運(yùn)行結(jié)果如圖:

這里需要注意如下幾點(diǎn):

NO.1我們?cè)谏厦娉跏蓟瘮?shù)組時(shí)是省略了方括號(hào)中的數(shù)字突雪,編譯器會(huì)根據(jù)初始化列表中的項(xiàng)數(shù)來(lái)確定數(shù)組的大小镰吵。

NO.2 Sizeof運(yùn)算符給了它運(yùn)算對(duì)象的大虚莺獭(以字節(jié)為單位)。使用Sizeof days 是整個(gè)數(shù)組的大小疤祭,Sizeof day[0]是數(shù)組中元素的大小盼产。整個(gè)數(shù)組的大小除以單個(gè)元素的大小就是數(shù)組元素的個(gè)數(shù)。

指定初始化器

C99多了一個(gè)新特性:指定初始化器勺馆。利用該特性可以初始化指定的數(shù)組元素戏售。

例如可以在初始化列表中使用帶方括號(hào)的下標(biāo)指明待初始化的元素:

  • int?shu[6]={[5]=55};//把shu[5]初始化為55

    一般來(lái)說(shuō),在初始化一個(gè)元素后草穆,沒(méi)有被初始化的元素都會(huì)被設(shè)置為0灌灾。以下面程序?yàn)槔?code>#include<stdio.h>#define?months 12int main (){?int?days[months]={31,28,[4]=31,30,31,[1]=29};int i;for(i=0;i<months;i++){printf("%2d?%d\n",i+1,days[i]);}return 0;}

    運(yùn)行如下:

    該程序需要注意以下幾點(diǎn)(需要多多思考哦):

    NO.1 如果指定初始化器后面有更多的值,如該例中的初始化列表中的片段:[4]=31,30,31,那么后面這些值將被用于初始化為30和31.

    NO.2?如果再次初始化指定的元素悲柱,那么最后的初始化將會(huì)取代之前的初始化锋喜。比如上面的程序中初始化列表開(kāi)始時(shí)把days[1]初始化為28,豌鸡,但是days[1]又被后面的指定初始化[1]=29初始化為29.

    NO.3?說(shuō)到如果沒(méi)有指定元素大小會(huì)怎樣呢嘿般?如下:

  • int?shu[]={1,[6]=2};//該數(shù)組有7個(gè)元素int?shu[]={1,[6]=2,3};//該數(shù)組有8個(gè)元素

    即:編譯器會(huì)把數(shù)組的大小設(shè)置為足夠裝得下初始化的值。

    數(shù)組邊界

    我們?cè)谑褂脭?shù)組時(shí)涯冠,要防止數(shù)組下標(biāo)越過(guò)邊界炉奴。簡(jiǎn)單來(lái)說(shuō)就是確保下標(biāo)是有效的值。比如:

  • int?you[20];

    在使用該數(shù)組時(shí)蛇更,就需要注意在程序中使用的數(shù)組下標(biāo)在0~19的范圍內(nèi)瞻赶,況且編譯器不會(huì)檢查出這種錯(cuò)誤。前面也說(shuō)到過(guò)派任。

    因此砸逊,使用越界的數(shù)組下標(biāo)會(huì)導(dǎo)致程序改變其他變量的值。不同的編譯器運(yùn)行該程序的結(jié)果可能也會(huì)不同哦掌逛,有的甚至?xí)?dǎo)致程序異常中止痹兜。

    還要記住一點(diǎn)就是數(shù)組元素的編號(hào)是從0開(kāi)始的哦,最好是在聲明數(shù)組時(shí)使用符號(hào)常量來(lái)表示數(shù)組的大小颤诀。

    數(shù)組下標(biāo)

    C99標(biāo)準(zhǔn)允許了一種新型的聲明方式:

  • int?a1[n];//c99之前是不允許這樣的哦

    這創(chuàng)建了一種新型數(shù)組字旭,稱為變長(zhǎng)數(shù)組。簡(jiǎn)稱VLA(C11放棄了這一舉措崖叫,把VLA設(shè)定為可選遗淳,而不是語(yǔ)言必備的特性)

    C99引入變長(zhǎng)數(shù)組主要是為了讓C成為更好的數(shù)值計(jì)算語(yǔ)言。

    注意:變長(zhǎng)數(shù)組是指用整型變量或表達(dá)式聲明或定義的數(shù)組心傀,而不是說(shuō)數(shù)組的長(zhǎng)度會(huì)隨時(shí)變化屈暗,變長(zhǎng)數(shù)組在其生存期內(nèi)的長(zhǎng)度同樣是固定的。

    多維數(shù)組

    上面把數(shù)組介紹得差不多了,那么下面就開(kāi)始介紹二維和多維數(shù)組养叛。我們可以把一維數(shù)組想象成一行數(shù)據(jù)种呐,把二維數(shù)組想象成數(shù)據(jù)表,把三維數(shù)組想象成一疊數(shù)據(jù)表弃甥。

    現(xiàn)在用一個(gè)項(xiàng)目來(lái)講解二維數(shù)組:

    如果有一個(gè)氣象員想要收集5年內(nèi)每個(gè)月的降水量數(shù)據(jù)爽室,那么他要如何表示數(shù)據(jù)呢?一個(gè)方案是創(chuàng)建60個(gè)變量淆攻,每個(gè)變量存儲(chǔ)一個(gè)數(shù)據(jù)項(xiàng)阔墩,顯然這個(gè)方法太麻煩。那么我們就可以用到二維數(shù)組來(lái)解決瓶珊,即創(chuàng)建一個(gè)主數(shù)組啸箫,主數(shù)組含有5個(gè)元素,每個(gè)元素是內(nèi)含12個(gè)元素的數(shù)組(每個(gè)元素表示一個(gè)月)伞芹。

    聲明數(shù)組如下:

  • float?rain[5][12];//內(nèi)含5個(gè)數(shù)組元素的數(shù)組忘苛,每個(gè)數(shù)組元素內(nèi)含12個(gè)float類型的元素

    float?rain[5][12]? //顏色部分是指rain是一個(gè)內(nèi)含5個(gè)元素的數(shù)組;非顏色部分則是指一個(gè)含有12個(gè)float類型元素的數(shù)組唱较。

    這說(shuō)明每個(gè)元素的類型都是float[12],簡(jiǎn)單說(shuō)也就是rain的每個(gè)元素本身都是一個(gè)內(nèi)含12個(gè)float類型值的數(shù)組扎唾。那么rain[0]是一個(gè)數(shù)組,它的首元素就是rain[0][0]绊汹,第二個(gè)便是rain[0][1],以此類推稽屏。

    該項(xiàng)目代碼如下:

    #include<stdio.h>#define months 12//12個(gè)月#define years 5//年數(shù)int main(){const?float?rain[years][months]={{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},{4.1,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},{4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},};//初始化時(shí)可省略內(nèi)部的花括號(hào)扮宠,只要保證初始化的數(shù)值個(gè)數(shù)正確int?year,month;float subtot,total;printf("year????rainfall???(inches)\n");for?(year=0,total=0;year<years;year++)//每一年西乖,各月的降水量總和{?for(month=0,subtot=0;month<months;month++)subtot+=rain[year][month];printf("%5d?%15.1f\n",2015+year,subtot);total+=subtot;} //5年的總降水量printf("\nThe?yearly?average?is?%.1f inches.\n\n",total/years);printf("monthly averages:\n\n");printf("Jan?Feb?Mar?Apr?May?Jun?Jul?Aug?Sep?Oct");printf("Nov Dec\n");for(month=0;month<months;month++){for(year=0,subtot=0;year<years;year++)subtot+=rain[year][month];printf("%4.1f",subtot/years);}printf("\n");return 0;}

    運(yùn)行結(jié)果如下:

    此程序計(jì)算了每年的總降水量,年平均降水量和月平均降水量坛增。

    該程序使用了兩個(gè)嵌套for循環(huán)获雕,第一個(gè)是嵌套for循環(huán)的內(nèi)層循環(huán),在year不變的情況下收捣,遍歷month計(jì)算某年的總降水量届案;外層循環(huán)則改變year的值,重復(fù)遍歷month罢艾,計(jì)算五年的總降水量楣颠。

    這里我們可以看到處理二維數(shù)組需要處理用到2重嵌套循環(huán),通常來(lái)說(shuō)咐蚯,處理三維數(shù)組需要用到3重嵌套循環(huán)童漩,四維則需要用到4重嵌套循環(huán)。

    我們說(shuō)的二維數(shù)組的許多相關(guān)內(nèi)容都適用于三維或者多維數(shù)組春锋。比如聲明一個(gè)三維數(shù)組如下:

  • int name [3][3][3];

    最后的話

    相信你學(xué)到這里或多或少都對(duì)數(shù)組有了一定的了解矫膨,想要更好的理解數(shù)組,建議多看幾遍哦。這也是經(jīng)過(guò)多次閱讀書籍從而整理出來(lái)數(shù)組里最重要的一些知識(shí)點(diǎn)侧馅。希望大家看完這篇文章后對(duì)數(shù)組有更好的了解危尿。

    5個(gè)超正經(jīng)的網(wǎng)站

    讓它助你完成假期“超車”

    一個(gè)正在學(xué)習(xí)C語(yǔ)言的人,致力于將C講得更透徹馁痴!

    點(diǎn)贊關(guān)注~謝謝你~

    長(zhǎng)按下圖二維碼關(guān)注谊娇,和你一起領(lǐng)悟程序員的魅力。


  • ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
    • 序言:七十年代末弥搞,一起剝皮案震驚了整個(gè)濱河市邮绿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攀例,老刑警劉巖船逮,帶你破解...
      沈念sama閱讀 216,496評(píng)論 6 501
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異粤铭,居然都是意外死亡挖胃,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 92,407評(píng)論 3 392
    • 文/潘曉璐 我一進(jìn)店門梆惯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)酱鸭,“玉大人,你說(shuō)我怎么就攤上這事垛吗“妓瑁” “怎么了?”我有些...
      開(kāi)封第一講書人閱讀 162,632評(píng)論 0 353
    • 文/不壞的土叔 我叫張陵怯屉,是天一觀的道長(zhǎng)蔚舀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锨络,這世上最難降的妖魔是什么赌躺? 我笑而不...
      開(kāi)封第一講書人閱讀 58,180評(píng)論 1 292
    • 正文 為了忘掉前任,我火速辦了婚禮羡儿,結(jié)果婚禮上礼患,老公的妹妹穿的比我還像新娘。我一直安慰自己掠归,他們只是感情好缅叠,可當(dāng)我...
      茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
    • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著虏冻,像睡著了一般肤粱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兄旬,一...
      開(kāi)封第一講書人閱讀 51,165評(píng)論 1 299
    • 那天狼犯,我揣著相機(jī)與錄音余寥,去河邊找鬼。 笑死悯森,一個(gè)胖子當(dāng)著我的面吹牛宋舷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓢姻,決...
      沈念sama閱讀 40,052評(píng)論 3 418
    • 文/蒼蘭香墨 我猛地睜開(kāi)眼祝蝠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了幻碱?” 一聲冷哼從身側(cè)響起绎狭,我...
      開(kāi)封第一講書人閱讀 38,910評(píng)論 0 274
    • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褥傍,沒(méi)想到半個(gè)月后儡嘶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 45,324評(píng)論 1 310
    • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恍风,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
    • 正文 我和宋清朗相戀三年蹦狂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朋贬。...
      茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
    • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凯楔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锦募,到底是詐尸還是另有隱情摆屯,我是刑警寧澤,帶...
      沈念sama閱讀 35,424評(píng)論 5 343
    • 正文 年R本政府宣布糠亩,位于F島的核電站虐骑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏削解。R本人自食惡果不足惜富弦,卻給世界環(huán)境...
      茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
    • 文/蒙蒙 一沟娱、第九天 我趴在偏房一處隱蔽的房頂上張望氛驮。 院中可真熱鬧,春花似錦济似、人聲如沸矫废。這莊子的主人今日做“春日...
      開(kāi)封第一講書人閱讀 31,668評(píng)論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蓖扑。三九已至,卻和暖如春台舱,著一層夾襖步出監(jiān)牢的瞬間律杠,已是汗流浹背潭流。 一陣腳步聲響...
      開(kāi)封第一講書人閱讀 32,823評(píng)論 1 269
    • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柜去,地道東北人灰嫉。 一個(gè)月前我還...
      沈念sama閱讀 47,722評(píng)論 2 368
    • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嗓奢,于是被迫代替她去往敵國(guó)和親讼撒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
      茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

    推薦閱讀更多精彩內(nèi)容

    • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
      夏天再來(lái)閱讀 3,340評(píng)論 0 2
    • 數(shù)組在程序設(shè)計(jì)中股耽,為了處理方便根盒, 把具有相同類型的若干變量按有序的形式組織起來(lái)。這些按序排列的同類數(shù)據(jù)元素的集合稱...
      朱森閱讀 3,919評(píng)論 2 13
    • 轉(zhuǎn)載:在開(kāi)發(fā)中,數(shù)組的使用場(chǎng)景非常多诬乞,平日中也涉及到很多數(shù)組的api/相關(guān)操作厂榛,一直也沒(méi)有對(duì)這塊內(nèi)容進(jìn)行一塊整理總...
      七色煙火閱讀 3,217評(píng)論 0 3
    • 0.linux啟動(dòng)的步驟 設(shè)備加電----》BIOS自檢-----》grub引導(dǎo)啟動(dòng)-----》加載內(nèi)核----》...
      萌面大叔2閱讀 779評(píng)論 0 1
    • 創(chuàng)意無(wú)處不在击奶,關(guān)鍵在于你是否細(xì)心觀察,是否能大膽想象责掏。很多時(shí)候都是我們自己把自己固化了柜砾,每天跳不出思維的陷阱,所以...
      環(huán)盈閱讀 101評(píng)論 1 0