c primer筆記之陣列與指標的一些總結

2021-07-26 06:33:58 字數 2441 閱讀 4695

型別 陣列名[維度];

eg: int a[10] , int b[10][10][10];

//注意: 

1.陣列的維度也是陣列型別的一部分。

eg: int a[10];  陣列a的型別為int[10];

int b[10][10][10] 陣列b的型別為int[10][10][10];

2.維度必須是編譯期常量!!!

3.陣列不可以拷貝和賦值。 ==》  這個決定了函式的返回值型別不可以是陣列。

eg:int a = ;   int b = a;  //錯誤

int *ptrs[10] ;        ==>> ptrs型別為陣列,陣列的元素型別是int *(即指向整形的指標)。

int &refs[10] ;        ==>> 錯誤,不存在元素為引用的陣列。

int (*parray)[10] ;    ==>> parray型別為指標,指向的物件的型別為int [10](即維度為10的陣列)。

note:

1.在大多數的表示式中,使用陣列型別的物件其實是使用乙個指向該陣列首元素的指標。

2.嚴格來說,c++語言中並沒有多維陣列,通常所說的多維陣列其實就是陣列的陣列。

eg: int arr[10][10][10];    arr是個大小為10的陣列,它的每個元素都是大小為10的陣列,這些陣列的元素又都是含有10個整形的陣列。

下標和指標:
參考note1,,在很多情況下使用陣列的名字其實用的是乙個指向陣列首元素的指標,乙個典型的例子就是當對陣列使用下標運算時,編譯期會自動執行上述轉換。

eg:int ia = ;

int i= ia[2] ; //ia轉換為指向陣列首元素的指標,等價於: int *p = ia/*p指向ia的首元素*/; i = *(p + 2);

int* p = &ia[2]; //p指向索引為2的元素.

int j = p[1]; //p[1]等價於*(p+1).

int k = p[-2]; //p[-2]是ia[0]的元素. //指標的下標運算所用的索引並不是無符號型別,這一點跟stl中的vector,string型別並不相同。

//一維陣列

int arr[10] = ;

int (*p00)[10] = &arr; //arr的型別為int[10],因此取位址後獲取的指標型別為int[10] *。

int *p01 = arr; //arr為陣列名,參考上面note1,陣列名通常轉換為指向陣列首元素的指標,首元素為int型別。

//二維陣列

int arr1[10][10] = ;

int (*p10)[10][10] = &arr1; //arr1型別為int[10][10],因此對arr1取位址後獲取的指標型別為int[10][10] *。

int (*p11)[10] = arr1; //arr1為陣列名,參考上面note1,陣列名通常轉換為指向陣列首元素的指標,首元素為int[10]型別。

int *p12 = arr1[0]; //arr1[0]為arr1第乙個元素,且arr1的元素是型別為int[10]的陣列,因此arr1[0]也為陣列名,參考上面note1,陣列名通常轉換為指向陣列首元素的指標,首元素為int型別。

int (*p13)[10] = &arr1[0]; //arr1[0]為arr1第乙個元素,且arr1的元素是型別為int[10]的陣列,因此取位址後獲取的指標型別為int[10] *。

//三維陣列

int arr2[10][10][10] = ;

int (*p20)[10][10][10] = &arr2; //arr2型別為int[10][10][10],因此對arr2取位址後獲取的指標型別為int[10][10][10] *。

int (*p21)[10][10] = arr2; //arr2為陣列名,參考上面note1,陣列名通常轉換為指向陣列首元素的指標,首元素為int[10][10]型別。

int (*p22)[10][10] = &arr2[0];

int (*p23)[10] = arr2[0];

int (*p24)[10] = &arr2[0][0];

int *p25 = arr2[0][0];

int *p26 = &arr2[0][0][0];

c primer閱讀筆記之陣列與指標

陣列初始化方式 沒有顯示初始化 陣列的主要限制 int pia new int 10 會分配空間但不進行值初始化 int pia new int 10 會分配空間而且會進行值初始化 如果在堆中建立的陣列儲存了內建型別的const物件,則必須為這個陣列提供初始化 何時使用動態陣列?當我們在編譯的時候,...

C PRIMER讀書筆記 之 陣列與指標

1.維數必須用值大於等於1的常量表示式定義。此常量表示式 只能包含整形字面值 列舉常量或者用常量表示式初始化的整形const物件。注意 非const變數以及要到執行階段才知道值得const變數不能用於定義陣列維數。例 const unsigned sz get size int test score...

C PRIMER之4 陣列和指標

1 陣列 陣列的維度必須為大於0的常量表示式 int a 3 函式體內的陣列,無初始化操作.函式體外的會初始化預設值.char b abc 會在後面新增乙個空字元.長度為4.不允許直接複製和賦值.長度是固定的.2 陣列操作 下標型別為size t 保護好避免越界 buffer overflow 3 ...