C 陣列初始化與指標

2022-04-07 07:37:33 字數 1708 閱讀 5101

1. 很容易出現的誤區:

int a[5] = ;    // 全部初始化為0

int a[5] = ; //

我想全部初始化為1

上面初始化 1 的作法將會產生錯誤,而且你很可能想當然這麼以為,從而導致耗費時間。如果真正理解資料初始化的原則,就不會犯錯了。陣列初始化列表中的元素個數小於指定的陣列長度時,不足的元素補以預設值。

對於基本型別int來說,當然就是補int()即0了。再看一下非基本型別的陣列:

string a[5] = ;

等價於

string a[5] = ;

即後面4個元素呼叫了string的預設建構函式進行的初始化,而第乙個則呼叫的string::string(const char*)進行的初始化。

2. memset 的誤區

注意:memset的使用有個大問題,就是它只對char型別的陣列管用,因為memset的內部實現是以位元組為單位進行賦值的,如果對int 型別(4個位元組),陣列記憶體連續,結果會如下

//

成功char a[10

];memset(a,

1, 10); //

將每個元素設定為1

//異常值

int a[10

];int a[10

];memset(a,

1, 10*sizeof(int

));for(int i = 0; i < 10; i++)

cout

<< a[i] << endl; //

都被賦值為16843009,十六進製制表示為0x01010101

c++中陣列定義及初始化

6.14 — pointers to pointers and dynamic multidimensional arrays

1. 一維陣列

靜態 int array[100];   定義了陣列array,並未對陣列進行初始化

靜態 int array[100] = ;  定義並初始化了陣列array

動態 int* array = new int[100];  delete array;  分配了長度為100的陣列array 

動態 int* array = new int[100];  delete array; 為長度為100的陣列array初始化前兩個元素

2. 二維陣列

靜態 int array[10][10];  定義了陣列,並未初始化

靜態 int array[10][10] = , };  陣列初始化了array[0][0,1]及array[1][0,1]

動態 int (*array)[n] = new int[m][n]; delete array;  // in c++11: auto array = new int[m][n]

動態 int** array = new int*[m]; for(i) array[i] = new int[n];  for(i) delete array[i]; delete array;    多次析構

動態 int* array = new int[m*n];  delete array;      陣列按行儲存

注意這種方式不可用: int **array = new int[m][n];

C 陣列(初始化陣列,陣列邊界,陣列與指標)

陣列由資料型別相同的一系列元素組成。陣列元素按順序儲存在記憶體中,通過整數下標subscript 或索引index 可以訪問各元素。c把陣列看作是派生型別,因為陣列是建立在其他型別的基礎上。int powers 8 從ansi c開始支援這種初始化 以逗號分隔的值列表 用花括號括起來 來初始化陣列,...

C語言 陣列指標初始化

char m 3 4 m 3 4 當然不行,不管從初始化器,還是從原理上來講都不正確,首先a 3 4 表示的是陣列中第4行第5個元素,請問,可以對陣列中具體的乙個元素賦這麼長一串值嗎?所以不能這樣賦值。第一種寫法是屬於初始化,初始化會自動為陣列中的每乙個元素賦正確的值。陣列指標初始化方法 int p...

指標陣列的初始化!

const char strings 7 這是宣告時初始化的清況,如果先宣告,在初始化呢?我想當然的寫成 const char strings 7 strings 我不知道問題出在哪兒,基礎不牢啊。所以在研究一下指標陣列的初始化。上面 const char strings 7 宣告了乙個指標陣列,它...