您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)C語(yǔ)言數(shù)組是什么意思的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
數(shù)組(Array)是一種用來(lái)存儲(chǔ)同一種類(lèi)型的集合,是一種有序的線性結(jié)構(gòu)表。并且數(shù)組元素的地址是連續(xù)的。
數(shù)組最大的優(yōu)點(diǎn)就是支持隨機(jī)訪問(wèn),當(dāng)想訪問(wèn)數(shù)組的某個(gè)數(shù)時(shí),只需要找到數(shù)組的對(duì)應(yīng)下標(biāo)就可以直接找到該數(shù)組對(duì)應(yīng)元素。但是數(shù)組也有相應(yīng)的缺點(diǎn),那就是數(shù)組的元素個(gè)數(shù)和數(shù)組空間大小在創(chuàng)建時(shí)就已經(jīng)被固定死了,如果數(shù)組的空間沒(méi)有使用完也會(huì)造成空間浪費(fèi),并且因?yàn)閿?shù)組的地址是連續(xù)的,這本應(yīng)該是一個(gè)優(yōu)點(diǎn)的,但是這導(dǎo)致數(shù)組在進(jìn)行刪除或增加元素時(shí)需要O(n)才能完成。
數(shù)組的下標(biāo)
數(shù)組下標(biāo)是從0開(kāi)始的,假設(shè),訪問(wèn)arr[5]元素時(shí),訪問(wèn)的是數(shù)組的第6個(gè)元素,訪問(wèn)arr[0]時(shí),訪問(wèn)的是數(shù)組的第一個(gè)元素。
一維數(shù)組創(chuàng)建
一維數(shù)組是常見(jiàn)的數(shù)組,創(chuàng)建方法是:數(shù)據(jù)類(lèi)型 + 數(shù)組名 [ 元素個(gè)數(shù) ];
int arr[10];
在C99的標(biāo)準(zhǔn)之前,當(dāng)數(shù)組在創(chuàng)建時(shí),方括號(hào)內(nèi)的數(shù)組元素個(gè)數(shù)只能是常量,使用的常量也必須是真正意義上的常量,比如用const修飾的變量有了常屬性,但不是真正意義的常量,而由define定義的常量可以用來(lái)做數(shù)組元素個(gè)數(shù)。而C99之后數(shù)字方括號(hào)內(nèi)的元素可以使用變量,而使用變量的做數(shù)組元素個(gè)數(shù)的數(shù)組,叫做變長(zhǎng)數(shù)組。
一維數(shù)組初始化
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//整形數(shù)組 int arr[] = {0}//不指定大小但必須初始化 char ch[10] = {'1','2','3'};//字符數(shù)組 char str[10] = "abcde";//字符串?dāng)?shù)組
一維數(shù)組的賦值
用循環(huán)變量訪問(wèn)數(shù)組下標(biāo),給數(shù)組進(jìn)行賦值。%s對(duì)應(yīng)的是輸入一個(gè)字符串,需要提供一個(gè)字符數(shù)組來(lái)存儲(chǔ),數(shù)組名是一個(gè)地址,所以不用加&取地址。
int arr[10] = {0}; for(int i = 0;i < 10;i++) { scanf("%d",&arr[i]; } char str[10] = {0}; scanf("%s",str);//字符串賦值可以不取地址和循環(huán)
一維數(shù)組在內(nèi)存的存儲(chǔ)方式
一維數(shù)組的元素地址是連續(xù)的,也就是元素的地址一個(gè)緊挨著一個(gè)。地址在內(nèi)存是以二進(jìn)制進(jìn)行存儲(chǔ)的,但是如果以二進(jìn)制來(lái)展示的話就會(huì)非常的長(zhǎng)而且也未必好理解,所以就由十六進(jìn)制來(lái)進(jìn)行展示。(下圖)觀察下圖可發(fā)現(xiàn),地址的是由低到高隨著下標(biāo)增長(zhǎng)而增長(zhǎng)的,有規(guī)律的遞增,且每個(gè)數(shù)組元素地址都相差了四個(gè)字節(jié),相差的四個(gè)字節(jié)是一個(gè)int整形的空間大小。
二維數(shù)組在我們的邏輯概念中可以是一個(gè)矩陣,但在內(nèi)存中與一維數(shù)組一樣是一個(gè)連續(xù)的地址空間。通常我們將二維數(shù)組的第一個(gè)方括號(hào)看做行,第二個(gè)方括號(hào)看做是列。
二維數(shù)組的創(chuàng)建和初始化
二維數(shù)組與一維數(shù)組只是多加了一個(gè)方括號(hào)。數(shù)據(jù)類(lèi)型 + 數(shù)組名[元素個(gè)數(shù)][元素個(gè)數(shù)];
int arr[3][3] = {1,2,3,4};//4自動(dòng)存到arr[1][0]的位置 int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};//一個(gè)大括號(hào)代表一行,每個(gè)大括號(hào)以逗號(hào)隔開(kāi) int arr[][3] = {0};//二維數(shù)組可以不初始化行,但必須初始化列
二維數(shù)組的賦值
給二維數(shù)組賦值,與一維數(shù)組一樣都需要循環(huán)來(lái)搞定,但是二維數(shù)組需要在一維數(shù)組的循環(huán)基礎(chǔ)上再嵌套一層循環(huán)。
int arr[3][3] = {0}; for(int i = 0;i < 3;i++) { for(int j = 0;j < 3;j++) { scanf("%d",&arr[i][j]);//i訪問(wèn)行,j訪問(wèn)列 } }
數(shù)組的下標(biāo)范圍是有限的,因?yàn)閿?shù)組的下標(biāo)是由0開(kāi)始的,所以數(shù)組能訪問(wèn)的的下標(biāo)就是數(shù)組元素個(gè)數(shù)減一個(gè)(N-1),當(dāng)訪問(wèn)了不屬于數(shù)組元素地址范圍的空間,就叫做數(shù)組越界。假設(shè)一個(gè)arr[10]的數(shù)組,當(dāng)訪問(wèn)下標(biāo)時(shí)大于等于10的時(shí)候,就會(huì)導(dǎo)致數(shù)組向后溢出,也叫下溢出,相對(duì)的,當(dāng)數(shù)組向數(shù)組第一個(gè)元素的前面越界訪問(wèn)時(shí),也就是下標(biāo)小于0,就叫上溢出,越界訪問(wèn)是非常危險(xiǎn)的一個(gè)操作,因?yàn)橛械木幾g器沒(méi)有檢查數(shù)組是否越界的功能,所以,當(dāng)程序員在寫(xiě)代碼所以數(shù)組時(shí),要非常注意數(shù)組是否存在越界問(wèn)題。二維數(shù)組的行和列也同樣
數(shù)組名是指向數(shù)組首元素地址的指針,即下標(biāo)為0的元素的地址的指針。上面說(shuō),由于數(shù)組的地址是連續(xù)的,所以當(dāng)找到數(shù)組的首元素就可以找到數(shù)組的其他成員。如果用sizeof(數(shù)組名),這里的數(shù)組名代表的是整個(gè)數(shù)組,計(jì)算的是整個(gè)數(shù)組的大小。再除以sizeof(下標(biāo)為0的地址),就可以得到數(shù)組的元素個(gè)數(shù)。
數(shù)組的傳參方式
當(dāng)要將數(shù)組作為函數(shù)參數(shù)進(jìn)行傳參時(shí),需要在函數(shù)的傳參位置放一個(gè)數(shù)組名,形參部分就會(huì)接收到一個(gè)數(shù)組的首元素地址的指針,而接收這個(gè)指針就也需要同類(lèi)型的指針。在形參部分,數(shù)組可以有兩種形式表示,一種是以數(shù)組的形式,一種是以指針的形式,兩種方式都可以對(duì)數(shù)組進(jìn)行傳參。
void bubble_sort(int arr[]) void bubble_sort(int* arr)當(dāng)數(shù)組在傳參之后,函數(shù)部分是不能計(jì)算數(shù)組的元素個(gè)數(shù)的。因?yàn)樾螀⒔邮盏闹皇且粋€(gè)數(shù)組的首元素地址的指針,而不是整個(gè)數(shù)組,計(jì)算數(shù)組的時(shí)候也只是計(jì)算了數(shù)組的首元素地址的大小,然后再除以首元素地址的大小,所以理所當(dāng)然的得到一個(gè)1。所以,當(dāng)數(shù)組需要傳參,并且還需要用到數(shù)組的元素個(gè)數(shù)時(shí),要先計(jì)算好數(shù)組元素個(gè)數(shù),將計(jì)算好的元素個(gè)數(shù)和數(shù)組一起傳參。
感謝各位的閱讀!關(guān)于“C語(yǔ)言數(shù)組是什么意思”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。