- N +

數(shù)組的定義和使用 數(shù)組定義的三種方式

大家好,今天小編來(lái)為大家解答數(shù)組的定義和使用這個(gè)問(wèn)題,數(shù)組定義的三種方式很多人還不知道,現(xiàn)在讓我們一起來(lái)看看吧!

C語(yǔ)言學(xué)到數(shù)組了,感覺(jué)有點(diǎn)難,你能舉例子說(shuō)說(shuō)數(shù)組怎么用嗎使用數(shù)組要注意什么嗎

謝邀。

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

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

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

小明班級(jí)有60個(gè)人,期末考試出成績(jī)后,編寫(xiě)C語(yǔ)言程序找出這60個(gè)人的最高得分。

這當(dāng)然不是什么難題,會(huì)判斷兩個(gè)數(shù)的大小就能解決這個(gè)問(wèn)題。只不過(guò),這60個(gè)人的成績(jī)?cè)趺从肅語(yǔ)言描述呢?定義60個(gè)變量?這樣是不是太麻煩了?就算不嫌麻煩,比較兩個(gè)數(shù)大小的邏輯怎么寫(xiě)呢,每?jī)蓚€(gè)變量就得寫(xiě)一個(gè)if?

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

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

floatscore[60];

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

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

注意,在定義數(shù)組時(shí),floatscore[60];這里的60表示數(shù)組長(zhǎng)度,而在訪(fǎng)問(wèn)時(shí),score[60]這里的60是指score數(shù)組的第60個(gè)元素。

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

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

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

floatscore[60]={68.0,84.2,};

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

floatscore[]={68.0,84.2,77.7};

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

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

使用C語(yǔ)言數(shù)組解決上述問(wèn)題

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

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

使用C語(yǔ)言數(shù)組注意事項(xiàng)

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

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

為什么C語(yǔ)言編譯器對(duì)這么明顯的錯(cuò)誤都不做處理?

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

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

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

合法的數(shù)組定義

charstr[]={48,49,50,51,52,53}是合法的數(shù)組定義。

【SQL】存儲(chǔ)過(guò)程中如何定義數(shù)組

存儲(chǔ)過(guò)程里定義不了數(shù)組。如果是sqlserver,那么你可以用表變量,游標(biāo)來(lái)實(shí)現(xiàn)你的功能。如果是sqlserver2005以上的版本,可以做clr存儲(chǔ)過(guò)程,那里面是可以用數(shù)組的。

c語(yǔ)言數(shù)組定義

1、一維數(shù)組

定義公式:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式];

注意:常量表達(dá)式包括常量與符號(hào)常量,不能包含變量。

例如:

inta[5];

charc[3];

上面的示例中,定義了一個(gè)int整型數(shù)組,數(shù)組名為a,定義的數(shù)組稱(chēng)為數(shù)組a。還定義了一個(gè)字符類(lèi)型的數(shù)組,數(shù)組名為c,定義的數(shù)組稱(chēng)為數(shù)組c。

此時(shí)數(shù)組a中有5個(gè)元素,每個(gè)元素都是int型變量;數(shù)組c中有3個(gè)元素,每個(gè)元素都是char型變量。

說(shuō)明:數(shù)組名除了表示該數(shù)組之外,還表示該數(shù)組的首地址。數(shù)組中的元素在內(nèi)存中的地址是連續(xù)分配的。

下面我們來(lái)看看C語(yǔ)言定義和初始化一維數(shù)組的幾種形式:

示例1:整型數(shù)組的定義和初始化

inta[5]={1,2,3,4,5};

intarr[]={1,2,4};

intarr[10]={1,2};

示例2:字符數(shù)組的定義和初始化

charstr1[5]=“hello”;//定義數(shù)組長(zhǎng)度:30

charstr1[30]={'L','e','t','\'','s','','g','o','\0'};//字符串長(zhǎng)度:8;數(shù)組長(zhǎng)度:30

charstr1[30]="Let'sgo";//字符串長(zhǎng)度:8;數(shù)組長(zhǎng)度:30

charstr2[]="toLondon!";//字符串長(zhǎng)度:11(注意開(kāi)頭的空格);數(shù)組長(zhǎng)度:12

2、二維數(shù)組

定義公式:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];

例如:

inta[3][4];

charc[3][10];

js數(shù)組定義的方法

1可以使用字面量方式定義數(shù)組,即用方括號(hào)[]包含數(shù)組元素,各元素之間用逗號(hào)分隔。2也可以使用構(gòu)造函數(shù)Array()定義數(shù)組,傳入元素列表或數(shù)組長(zhǎng)度作為參數(shù)。3另外,ES6中也新增了一些定義數(shù)組的方式,如使用Array.from()、Array.of()等方法。內(nèi)容延伸:數(shù)組是JavaScript中最常用的數(shù)據(jù)類(lèi)型之一,可以用于存儲(chǔ)任意類(lèi)型的數(shù)據(jù)。在使用數(shù)組時(shí),要注意數(shù)組下標(biāo)從0開(kāi)始計(jì)數(shù),且數(shù)組長(zhǎng)度可以動(dòng)態(tài)改變。同時(shí),數(shù)組中的元素也可以是對(duì)象、函數(shù)等復(fù)雜類(lèi)型。

如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

返回列表
上一篇:
下一篇: