一維數(shù)組
數(shù)組名
在 C中淡诗,幾乎所有使用數(shù)組名的表達(dá)式中骇塘,數(shù)組名的值是一個指針常量(所以你不能給數(shù)組名重新賦一個新的地址)伊履,也就是數(shù)組第一個元素的地址;
但是數(shù)組和指針并不是等價的喲款违,數(shù)組具有一定數(shù)量的元素唐瀑,而指針只是一個標(biāo)量值;
只有兩種場合插爹,數(shù)組名并不用指針常量來表示哄辣,sizeof操作符時,返回的是整個數(shù)組的長度赠尾,而不是指向數(shù)組的指針的長度柔滔,取一個數(shù)組名的地址所產(chǎn)生的是一個指向數(shù)組的指針,而不是一個指向某個指針常量值的指針萍虽。
下標(biāo)引用
在使用下標(biāo)引用的地方睛廊,可以使用對等的指針?biāo)阈g(shù)再間接引用的表達(dá)式來代替。在使用指針表達(dá)式的地方杉编,也可以使用下標(biāo)表達(dá)式來代替超全。
提示:編譯器不會檢測數(shù)組下標(biāo)越界等錯誤(發(fā)送錯誤后發(fā)現(xiàn)得了不,這得看運(yùn)氣)邓馒,即使有的編譯器支持嘶朱,也可以選擇關(guān)閉。
指針和下標(biāo)的效率比較
下標(biāo)絕不會比指針更有效率光酣,但指針有時會比下標(biāo)更有效率疏遏。
詳情看C和指針145頁。
指針的效率
數(shù)組和指針
聲明數(shù)組參數(shù)
初始化
數(shù)組可以是靜態(tài)變量救军,也可以是自動變量财异,但自動變量每次進(jìn)入相應(yīng)局部都要賦值會浪費(fèi)時間。所以當(dāng)數(shù)組非常龐大的時候唱遭,就要考慮一下是不是有必要聲明為靜態(tài)變量戳寸。
1、不完整的初始化
int vector[5]={1,2,3}拷泽;后面少的兩個會默認(rèn)為0
2疫鹊、自動計算數(shù)組長度
int vector[]={1,2,3,4,5,6,7};
3司致、字符串是一個以'\0'結(jié)尾的字符數(shù)組拆吆,其聲明方式有兩種
(1)char message[]={'H','e','l','l','o',0};
(2)char message[]="hello";/*也許會有很多人仍未這里是一個字符串常量,其實(shí)這里只是一種初始化列表的快快速記法脂矫。那到底怎么和字符串常量進(jìn)行區(qū)分呢枣耀?這個就更具上下文環(huán)境,當(dāng)用于初始化一個字符數(shù)組時羹唠,他就是一個初始化列表奕枢,其他任何地方都代表一個字符串常量*/
辯一辯
char message[]="hello";
char *message2="hello";
多維數(shù)組
int c[6][10];
c只是在b的基礎(chǔ)上再增加一維,所以我們可以把c看作是一個包含6個元素的向量佩微,只不過它的每個元素本身是一個包含1-個整形元素的向量缝彬。
數(shù)組名
int array[3][10];
一維數(shù)組名的值是一個指針常量,它的類型是“指向元素類型的指針”哺眯,它指向數(shù)組的第一個元素谷浅。多維數(shù)組也一樣,只不過多維數(shù)組第一維實(shí)際上存的是另一個數(shù)組(也就是多維數(shù)組的第一維存儲的是另一個數(shù)組的首地址)奶卓,所以多維數(shù)組的數(shù)組名指的是存另一維數(shù)組首地址的數(shù)組首地址一疯。
所以*array,array[1]代表的是另一個(另一維)數(shù)組的首地址夺姑。
tips:array[3,4];指的是array[4]喲2333333333333
指向數(shù)組的指針
這個概念也就是多維數(shù)組中最外面那維數(shù)組存儲的值墩邀。
作為函數(shù)參數(shù)的多維數(shù)組
初始化
int matrix[2][3]={100,101,102,110,111,112};
int matrix[2][3]={
{100,101,102},
{110,111,112}
};
加不加花括號本身對初始化過程不會產(chǎn)生影響?但為什么還是要發(fā)明花括號這種聲明呢盏浙?一是為了觀察直接眉睹,二是加花括號
指針數(shù)組
int *api[10]:指針數(shù)組,每個數(shù)組元素存的是int *類型指針废膘;
int ?(*p)[10]:數(shù)組指針竹海,一個指針p指向的是一個數(shù)組的地址。
在矩陣中丐黄,每行必須與最長字符串的長度一樣長斋配,但它不需要任何指針。指針數(shù)組本身要占有空間灌闺,但每個指針?biāo)赶虻淖址加械膬?nèi)存空間就是字符串本身的長度艰争,沒有必要要和最長的一樣長。