數(shù)組(C語言版)

目錄
??前言
??1. 一維數(shù)組的創(chuàng)建和初始化
??1.1 數(shù)組的創(chuàng)建
??1.2 數(shù)組的初始化
??1.3 一維數(shù)組的使用
1.4 一維數(shù)組在內(nèi)存中的存儲(chǔ)
??2. 二維數(shù)組的創(chuàng)建和初始化
??2.1 二維數(shù)組的創(chuàng)建
???2.2 二維數(shù)組的初始化
?????2.3 二維數(shù)組的使用
?? 2.4 二維數(shù)組在內(nèi)存中的存儲(chǔ)
??3. 數(shù)組越界
??4. 數(shù)組作為函數(shù)參數(shù)
??4.1 函數(shù)實(shí)現(xiàn)冒泡排序的錯(cuò)誤設(shè)計(jì)
???4.2 數(shù)組名是什么
??4.3 冒泡排序的正確設(shè)計(jì)
??總結(jié)
??前言
在前兩期文章中,我們已經(jīng)對函數(shù)進(jìn)行了具體的概括。這期文章我們將要對C語言中的數(shù)組動(dòng)手了!數(shù)組可是數(shù)據(jù)結(jié)構(gòu)里面的重要組成,學(xué)好了數(shù)組對后期的數(shù)據(jù)結(jié)構(gòu)也會(huì)有很大的幫助的。上篇文章剛用數(shù)組實(shí)現(xiàn)了一個(gè)三子棋游戲http://t.csdn.cn/qJabR,是不是感覺還挺有趣的。好啦,廢話不多說,開始正文叭!
??1. 一維數(shù)組的創(chuàng)建和初始化
??1.1 數(shù)組的創(chuàng)建
數(shù)組它是一組相同元素的集合。數(shù)組的創(chuàng)建方式:

大家思考一個(gè)問題:代碼二中引用變量的數(shù)組能創(chuàng)建成功嗎?答案是在有的情況下是可以的。數(shù)組創(chuàng)建,在C99標(biāo)準(zhǔn)之前[]中要給一個(gè)常量才行。在C99標(biāo)準(zhǔn)中支持了變長數(shù)組的概念,數(shù)組的大小可以由使用變量指定,但是它不能初始化。?
??1.2 數(shù)組的初始化
數(shù)組的初始化是指:在創(chuàng)建數(shù)組的同時(shí)給數(shù)組的內(nèi)容一些合理初始值(初始化)

??1.3 一維數(shù)組的使用
在這里,我們要注意一個(gè)操作符[ ], 下標(biāo)引用操作符。它是數(shù)組訪問的操作符。
注意:1. 數(shù)組是使用下標(biāo)來訪問的,下標(biāo)是從0開始。 2. 數(shù)組的大小可以通過計(jì)算來得到


??1.4 一維數(shù)組在內(nèi)存中的存儲(chǔ)
話不多說,我們直接用代碼來演示:

我們仔細(xì)觀察輸出的結(jié)果,可以發(fā)現(xiàn),元素的地址是在不斷的加4。所以它們是有規(guī)律的遞增。? ?我們可以得出結(jié)論:?數(shù)組在內(nèi)存中是連續(xù)存放的。

??2. 二維數(shù)組的創(chuàng)建和初始化
??2.1 二維數(shù)組的創(chuàng)建

???2.2 二維數(shù)組的初始化
注意:二維數(shù)組初始化 它的行可以省略,但列不能省略。

?????2.3 二維數(shù)組的使用
二維數(shù)組的使用也是通過下標(biāo)來訪問的:

???2.4 二維數(shù)組在內(nèi)存中的存儲(chǔ)
為了直觀的觀察,我們還是直接上代碼通過輸出的地址來理解:

通過觀察它們的地址可以發(fā)現(xiàn)二維數(shù)組在內(nèi)存中也是連續(xù)存放的。?

??3. 數(shù)組越界
數(shù)組的下標(biāo)是有范圍限制的。
數(shù)組的下標(biāo)規(guī)定是從0開始的,如果有n個(gè)元素,最后一個(gè)元素的下標(biāo)為n-1。
數(shù)組的下標(biāo)如果小于0或大于n-1,就是數(shù)組越界訪問了,超出了數(shù)組合法空間的訪問。
C語言本身是不做數(shù)組下標(biāo)的越界檢查的,編譯器也不一定報(bào)錯(cuò)。所以就需要程序員自己檢查?

??4. 數(shù)組作為函數(shù)參數(shù)
在寫代碼的時(shí)候,我們時(shí)不時(shí)就會(huì)將數(shù)組作為函數(shù)的參數(shù)。在這里我們以冒泡排序?yàn)槔ň筒痪唧w將冒泡排序了,之前專門寫了一篇冒泡排序的文章http://t.csdn.cn/bUeGf)?
??4.1 函數(shù)實(shí)現(xiàn)冒泡排序的錯(cuò)誤設(shè)計(jì)
下面這個(gè)代碼,通過輸出,我們發(fā)現(xiàn)沒有達(dá)到我們要的效果。我們可以通過調(diào)試觀察,我們發(fā)現(xiàn),sz求出的是1,代表只有一個(gè)元素,說明arr數(shù)組作為函數(shù)參數(shù)的時(shí)候,沒有把整個(gè)數(shù)組傳進(jìn)去,只是把首元素地址傳進(jìn)去了


???4.2 數(shù)組名是什么

通過輸出的結(jié)果我們可以發(fā)現(xiàn):數(shù)組名就是數(shù)組首元素地址。(但是又兩個(gè)例外)
如果說數(shù)組名是首元素地址,那么:

?為什么它輸出的結(jié)果是40?

除此之外,所有的數(shù)組名就是表示數(shù)組首元素的地址。
??4.3 冒泡排序的正確設(shè)計(jì)
解決方法:將數(shù)組的個(gè)數(shù)在主函數(shù)中求出來,作為參數(shù)傳到函數(shù)里面


??總結(jié)
到這里,我們對于數(shù)組的內(nèi)容就已經(jīng)全部歸納完畢了。要注意的重點(diǎn)就是一維數(shù)組和二維數(shù)組的創(chuàng)建和初始化,數(shù)組的傳參。將這些內(nèi)容搞清楚,數(shù)組這一章內(nèi)容就算是登堂入室了。?下期內(nèi)容我們將會(huì)對操作符動(dòng)刀子了!大家可以留意留意。最后大家別忘了一鍵三連哦!
