C 陣列概述

2022-04-30 23:30:18 字數 2989 閱讀 4209

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.陣列的元素?包含在乙個陣列中的變數通常稱為陣列的元素 也叫變數的元素.在定義陣列時 可以預先指定陣列元素的個數 這時候在 中指定...