C是一種懷舊的語言,因?yàn)樗臍v史很久遠(yuǎn),然而自從各種面向?qū)ο蟮木幊陶Z言的相續(xù)出現(xiàn)讓它的影響力日減。當(dāng)然了,這是無可非議的,但是C的高效性是其他語言無妨比擬的,所以我們有必要把握其中的精華與奧妙,也就有必要知道其中的基本的數(shù)據(jù)結(jié)構(gòu)的比如數(shù)組,稍微有點(diǎn)深度的堆棧、列表、結(jié)構(gòu)體等的操作和實(shí)現(xiàn)。指針也是C語言中的一個(gè)很優(yōu)秀靈活的結(jié)構(gòu),對(duì)它的了解也是必不可少的。
我們一般都認(rèn)為數(shù)組是一維的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),因?yàn)槎粩?shù)組或者說矩陣都可以看作是多個(gè)一維數(shù)組的組合結(jié)構(gòu),定義在其上的數(shù)據(jù)存儲(chǔ)訪問方式是一樣的。所以一維數(shù)組是其中最基礎(chǔ)的最重要的部分,只有理解了此類數(shù)據(jù)結(jié)構(gòu)的本質(zhì)才能觸類旁通了。
數(shù)組(array)是若干同類變量的聚合,允許通過統(tǒng)一的名字飲用其中的變量。所以數(shù)組也就是一個(gè)同一類型的數(shù)據(jù)的有限集合??梢酝ㄟ^下表來訪問數(shù)組中的某一/些數(shù)組元素。在C語言中數(shù)組都由連續(xù)的內(nèi)存區(qū)域構(gòu)成(有時(shí)候,不一定是這樣),最低地址對(duì)應(yīng)首元素,數(shù)組的下標(biāo)是從0開始的,所以首元素也就是數(shù)組下標(biāo)為0的元素,的地址對(duì)應(yīng)最末的元素,即第N-1個(gè)元素(如果我們定義的數(shù)組為N元)。
數(shù)組的定義方式:
在C語言中允許在聲明數(shù)組的時(shí)候同時(shí)對(duì)其進(jìn)行初始化,也可以把聲明和定義放在不同的位置,初始化的一般的類似于如下的表達(dá)式:
type_specifier array_name[size1]...[sizeN] = {value_list};
其中vlaue_list是由逗號(hào)(,)分隔的常量表,常量表必須和type_specifier兼容。最后由分號(hào)與下一個(gè)語句分隔。由此可見一維數(shù)組的定義方式為:
type_specifier array_name[size] = {value_list};
如下:char hello[12] = {’H’,’e’,’l’,’l’,’o’,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’’};
注意:字符數(shù)組是一"’’"收尾的,這是C標(biāo)準(zhǔn)的一部分。因?yàn)樵诓僮髯址麛?shù)組的時(shí)候是以’’作為結(jié)束判斷的標(biāo)志。當(dāng)然了,如果你定義的是一個(gè)字符串那就不用加這個(gè)’’了。因?yàn)橛袡C(jī)制幫助你自動(dòng)添加。上面的例子的串的生命方式為:string hello = "Hello, world";(當(dāng)然了,具體的實(shí)現(xiàn)中你必須把"string.h"頭文件加入到你的文件中),或者你也可以這樣來聲明:
char *hello = "Hello, world";或者char hello[] = "Hello, world"; 切換為字符指針數(shù)組,其效果是一樣的);數(shù)槌跏薊氖焙蚧箍?nbsp;以不標(biāo)明小,即
char hello[] = {’H’,’e’,’l’,’l’,’o’,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’’};,這時(shí)候編譯器會(huì)根據(jù)后邊的賦值情況為數(shù)組分配合適的內(nèi)存空間,這個(gè)你不用擔(dān)憂,除非機(jī)器正處于內(nèi)存缺狀態(tài)。
我們一般都認(rèn)為數(shù)組是一維的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),因?yàn)槎粩?shù)組或者說矩陣都可以看作是多個(gè)一維數(shù)組的組合結(jié)構(gòu),定義在其上的數(shù)據(jù)存儲(chǔ)訪問方式是一樣的。所以一維數(shù)組是其中最基礎(chǔ)的最重要的部分,只有理解了此類數(shù)據(jù)結(jié)構(gòu)的本質(zhì)才能觸類旁通了。
數(shù)組(array)是若干同類變量的聚合,允許通過統(tǒng)一的名字飲用其中的變量。所以數(shù)組也就是一個(gè)同一類型的數(shù)據(jù)的有限集合??梢酝ㄟ^下表來訪問數(shù)組中的某一/些數(shù)組元素。在C語言中數(shù)組都由連續(xù)的內(nèi)存區(qū)域構(gòu)成(有時(shí)候,不一定是這樣),最低地址對(duì)應(yīng)首元素,數(shù)組的下標(biāo)是從0開始的,所以首元素也就是數(shù)組下標(biāo)為0的元素,的地址對(duì)應(yīng)最末的元素,即第N-1個(gè)元素(如果我們定義的數(shù)組為N元)。
數(shù)組的定義方式:
在C語言中允許在聲明數(shù)組的時(shí)候同時(shí)對(duì)其進(jìn)行初始化,也可以把聲明和定義放在不同的位置,初始化的一般的類似于如下的表達(dá)式:
type_specifier array_name[size1]...[sizeN] = {value_list};
其中vlaue_list是由逗號(hào)(,)分隔的常量表,常量表必須和type_specifier兼容。最后由分號(hào)與下一個(gè)語句分隔。由此可見一維數(shù)組的定義方式為:
type_specifier array_name[size] = {value_list};
如下:char hello[12] = {’H’,’e’,’l’,’l’,’o’,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’’};
注意:字符數(shù)組是一"’’"收尾的,這是C標(biāo)準(zhǔn)的一部分。因?yàn)樵诓僮髯址麛?shù)組的時(shí)候是以’’作為結(jié)束判斷的標(biāo)志。當(dāng)然了,如果你定義的是一個(gè)字符串那就不用加這個(gè)’’了。因?yàn)橛袡C(jī)制幫助你自動(dòng)添加。上面的例子的串的生命方式為:string hello = "Hello, world";(當(dāng)然了,具體的實(shí)現(xiàn)中你必須把"string.h"頭文件加入到你的文件中),或者你也可以這樣來聲明:
char *hello = "Hello, world";或者char hello[] = "Hello, world"; 切換為字符指針數(shù)組,其效果是一樣的);數(shù)槌跏薊氖焙蚧箍?nbsp;以不標(biāo)明小,即
char hello[] = {’H’,’e’,’l’,’l’,’o’,’,’,’ ’,’w’,’o’,’r’,’l’,’d’,’’};,這時(shí)候編譯器會(huì)根據(jù)后邊的賦值情況為數(shù)組分配合適的內(nèi)存空間,這個(gè)你不用擔(dān)憂,除非機(jī)器正處于內(nèi)存缺狀態(tài)。