程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++ 數組的初始化

C/C++ 數組的初始化

編輯:C++入門知識

C/C++ 數組的初始化


C/C++數組的初始化因為方法太多,而且規則也比較混亂,所以在使用的時候經常出現數組初始化就不對的問題,這裡把關於數組的初始化存在需要謹慎的問題進行一個簡單的總結,有遺漏的望同學們一起指出補充。

一維數組

靜態分配

1.

int a[3] = {0, 1, 2}; // 正確
int a[3]={0,1,2,3}; //錯誤,初始化值個數大於數組大小
int a[3]={0,,2}; //錯誤,初始化值被跳過
int a[3]={0,1,}; //錯誤,初始化值被跳過(即使是最後一個元素,添加逗號也被認為是跳過)
int a[3]={0}; //正確,省略初始化最後一個元素,最後省略的元素初始化為0
int a[n]={0}; // 注意n必須為const類型,否則錯誤

2.

char a[10] = "abceddddd";   //用一個字符串常量去初始化字符數組.注意: a[10]='\0'

3.

char a[10] = "abcd";    //當字符常量長度不夠時 數組的其他元素初始化為  '\0'

4.

int v1[] ={1,2,3,4};
char v2[]={'a','b','c',0}; //當數組定義時沒有指定大小,當初始化采用列表初始化了,那麼數組的大小由初始化時列表元素個數決定。所以v1和v2分別為 int[4] 和char[4]類型。

動態分配

1.

int* a = new int[10];   //new 分配了一個大小為10的未初始化的int數組,並返回指向該數組第一個元素的指針,此指針初始化了指針a
a = {4, -3, 5, -2, -1, 2, 6, -2, 3}; // 錯誤,注意這種用大括號的數組賦值只能用在聲明時,此處已經不是聲明,所以出錯。

那麼此時對a的賦值只能通過

1) int b[10]={...}; a = b;
2) a[i]=2;
3) memset(a, 1, sizeof(a));

2.

int *a = new int[10] ();  // 每個元素初始化為0,括號內不能寫其他值,只能初始化為0

3.

int* a = new int[n];// 注意n必須為const

4. 類中的初始化

class Something {
private:

int myArray[10];

public:

Something()
: myArray { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 } //使用大括號初始化必須在初始化列表中進行初始化,在構造函數內部初始化需使用memset之類的方法。
{
}

int ShowThingy(int what) {
    return myArray[what];
}
}



二維數組

靜態分配

靜態分配和一維的區別不大 1.
int value[9][9]; // value[i][j]的值不定,沒有初始化
2.
int value[9][9] = {{1,1},{2}}; //value[0][0,1]和value[1][0]的值初始化,其他初始化為0

動態分配

1.
int (*value)[n] = new int[m][n];
delete []value; // n必須為常量,調用直觀。未初始化
2.
int** value = new int* [m];
for(i) value[i] = new int[n];
for(i) delete []value[i];
delete []value; // 多次析構,存儲麻煩,未初始化

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved