1.一種初始化陣列的方法
int array = ; //編譯器根據花括號內元素的數目自動確定陣列的大小
需要注意的是:不允許在初始化之外的任何地方使用花括號對陣列進行賦值,如
int array[4];
array[4] = ; //錯誤
2.快速獲得陣列長度的方法
int a[5];
int b = ;
int * c = (int *)malloc(5*sizeof(int));
printf("%d, %d, %d\n", sizeof(a)/sizeof(int), sizeof(b)/sizeof(int), sizeof(c)/sizeof(int)); //列印結果為5, 5, 1
tips:sizeof返回運算元所佔位元組數
3.另一種初始化陣列的方法:可以制定任意位置的元素進行單個初始化,其餘元素預設初始化為0,如
int array[5] = ; //將array[4]初始化為9,其餘預設為0
int array[5] = ; //將array[2]初始化為5,array[3]初始化為7,array[4]初始化為9
4.c中不允許將乙個陣列直接整體賦值給另乙個陣列,如
int array1[4] = ;
int array2[4];
array2 = array1; //錯誤
5.編譯器不對陣列越界進行檢查,因此編譯通過的程式在執行時可能會報段錯誤(segment fault)
6.宣告陣列時,陣列大小必須用整型常量或整型常量表示式來表示(包括預編譯命令#define,但不包括const)
7.二維陣列的一種初始化方法:
int darray[3][3] = , , };
tips:花括號內數量若不足的話,預設初始化為0
8.陣列名也是陣列首元素的位址,即array == &array[0]
9.c中,對指標加1的結果是對該指標增加乙個儲存單元,而不是增加乙個位元組
可以從兩方面理解記憶這個設計:
1)為指標宣告指標型別,正是為了使編譯器知道+1時需要步進的位元組數
2)上述設計與陣列索引相印證,即*(array+n)等價於array[n]
10.處理陣列的函式實際上是使用指標作為引數的。以下兩種函式原型是等價的:
int sum(int , int);
int sum(int *, int);
11.對陣列的遍歷除了傳遞指向陣列頭部的指標和陣列長度這一方法之外,還有另一種方法,即傳遞兩個指標,分別指向陣列的頭和尾
12.c保證在為陣列分配儲存空間的時候,指向陣列之後的第乙個位置的指標也是合法的,但不保證該位置內儲存的內容
13.雖然陣列名和首元素指標變數是等價的,但++這種自增操作只能用於指標變數
14.兩指標相減獲得對應元素之間的距離,如:
int * pt1 = array;
int * pt2 = &array[4]; //等價於int *pt2 = array+4;
printf("%d", pt2-pt1); //結果為4
tips:進行相減運算的前提是這兩個指標均指向同乙個陣列
15.如果函式想修改陣列,那麼在宣告陣列參量時不要使用const;如果函式不需要修改陣列,那麼在宣告陣列參量時應使用const
使用const並不要求原始陣列是固定不變的,這只是說明函式在處理陣列時,應把陣列當做固定不變的
16.一般地,宣告n維陣列參量,除最左邊的方括號可以留空外,其他都需要填寫數值,如:
int sum4d(int ar[12][20][30], int n);
陣列指標和指標陣列
陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...
陣列指標和指標陣列
一 定義 陣列指標 陣列指標 是指向陣列 首元素的位址的 指標,其本質為指標 這個指標存放的是陣列首位址的位址,相當於2級指標,這個指標不可移動 指標陣列 陣列元素為指標的陣列,其本質為陣列。二 舉例 int a 3 4 這個無需多說,就是乙個 二維陣列 int p 4 就相當於int p 4 它就...
陣列指標和指標陣列
這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。指標陣列 array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標 陣列指標 a pointer to an ar...