int narr[4]; // 當陣列為全域性變數時,未初始化值預設為0;當陣列為區域性變數時,則其值在debug下為0xccccccc,release下為隨機值
int narr1[4] = ;
int narr2[4] = ; // 第4值預設為0
int narr3 = ; // 編譯器在編譯階段推斷陣列維數為4
int narr4[4] = ; // 陣列最高維可以在編譯階段推導出為2
int narr5[4] = , }; // 陣列最高維可以在編譯階段推導出為2
int narr6[4] = , }; // 陣列最高維可以在編譯階段推導出為2,剩下的預設為0
int narr7[2][4] = , }; // 陣列大小與賦值必須匹配
char szarr = "abcd"; // 編譯器在編譯階段推斷陣列維數為5
int narr1[4] = ; // sizeof(narr1)為16,因為narr1是int[4]型別
int narr2[3][4] = ; // sizeof(narr2)為48,因為narr2是int[3][4]型別
int narr6[4] = , , }; // 陣列最高維可以在編譯階段推導出為2,剩下的預設為0
int (&narr7)[4] = narr6[1]; // narr7即是narr6[2]的引用
int narr8[4] = ;
int (&narr9)[4] = narr8; // narr9即是narr8的引用
int narr1[4] = ;
int narr2[3][4] = ;
int *p1 = narr1;
int *p2 = narr2[1];
int *p3 = &narr2[1][0]; // p2,p3是相等的
int (*p4)[4] = narr2; // 此處的陣列名narr2退化為指標,p4是指標,指向int [4]型別陣列首位址
int (*p5)[4] = &narr2[0]; // p4,p5也是相等的
int *p6[4]; // p6是陣列,存放4個int型別指標。sizeof(p6)=16
int* p7[4]; // 因為的優先順序最高,所以p6,p7是相同的
typedef int intarray[4];
typedef int int2darray[3][4];
intarray arr1 = ;
int arr2[4] = ;
// arr1,arr2是等價的
int2darray arr3 = ;
int arr4[3][4] = ;
// arr3,arr4是等價的
-值與陣列因為陣列不能拷貝,所以陣列理論上不能作為值傳遞的形參。但事實上,我們有看到直接用陣列作為引數值傳遞的,這明顯違背陣列拷貝的原理。如下段**,其實是特殊情況,arr
其實並不是陣列型別,arr
在作為形參時已經自動退化成指標了。
void test(int arr[4])
void test1(int arr)
void test2(int arr[4])
void test3(int (*arr)[4])
void test(int (&arr)[4])
void test1(int &arr[4]) // error,arrays of references are illegal
void test(int (*arr)[4])
void test1(int* arr[4])
void test2(int* arr)
int (&test)() [4] // 返回的值優先引用,然後因為陣列的引用,所以陣列在引用後
; return narr;
}int (&ntemp)[4] = test();
// 上面返回引用的方式難理解,我們可以換一種方式
typedef int intarray[4];
intarray& test() // 利用typdef簡單陣列型別
; return narr;
}intarray& ntemp = test();
// c++11引用了型別推導,可以用下面形式
int narr[4] = ;
decltype(narr)& test23()
int narr[3][4] = , , };
int (*test())[4]
int (*parr)[4] = test();
// 用typedef,c++11也可以用decltype(**略)
typedef int intarray[4];
int narr[3][4] = , , };
intarray* test()
intarray* parr = test();
相同點,陣列與vector的記憶體都是連續的。
不同點,陣列是固定大小,而vector是動態大小。
int narr[5] = ;
sort(narr, narr+_countfof(narr));
vectorvint(narr, narr+_countfof(narr));
// 因為vector記憶體是連續的,所以可以直接拷貝記憶體。
memcpy(narr, &vint[0], vint.size()*sizeof(int));
C 陣列概述
陣列具有以下屬性 1.陣列可以是一維 多維或交錯的。2.陣列元素的預設值設定為零,而引用元素的預設值設定為null。3.交錯陣列是陣列的陣列,因此,它的元素是引用型別,初始化為null。4.陣列的索引從零開始 具有n個元素的陣列的索引是從0到n 1。5.陣列元素可以是任何型別,包括陣列型別。6.陣列...
C語言陣列概述
1.一維陣列 2.二維陣列 3.有關陣列的運算 char arr 10 float arr1 2 double arr2 30 char arr abc char arr1 3 char p abcd p中存的的是字元a的位址int main int p arr p中存的a的位址 int i 0 f...
陣列一 陣列概述 c
一.數組概述 1 1.陣列?陣列是帶索引的同型別的物件的集合.陣列是一種資料結構,它包含若干相同型別的變數。陣列是乙個經過索引的物件集合。例如 int array 1 2.陣列的元素?包含在乙個陣列中的變數通常稱為陣列的元素 也叫變數的元素.在定義陣列時 可以預先指定陣列元素的個數 這時候在 中指定...