一直以為 int a[256]=;是把a的所有元素初始化為0,int a[256]=;是把a所有的元素初始化為1.
除錯的時檢視記憶體發現不是那麼一回事,翻了一下《the c++ programming language》總算有定論。pdf的竟然不然複製,就把它這章翻譯了,如下
5.2.1 陣列初始化
陣列可以用乙個列值來初始化,例如
int v1 =;
char v2=;
當陣列定義時沒有指定大小,當初始化採用列表初始化了,那麼陣列的大小由初始化時列表元素個數決定。所以v1和v2分別為 int[4] 和char[4]型別。如果明確指定了陣列大小,當在初始化時指定的元素個數超過這個大小就會產生錯誤。例如:
char v3[2] =; //錯誤:太多的初始化值了
char v3[3] =; //正確
如果初始化時指定的的元素個數比陣列大小少,剩下的元素都回被初始化為 0。例如
int v5[8]=;
等價於int v5[8]=;
注意沒有如下形式的陣列賦值:
void f()
; //錯誤:不是陣列賦值
}如果你想這樣的複製的話,請使用 vector(16章第三節) 或者 valarray(22章第四節)。
字元陣列可以方便地採用字串直接初始化(參考第五章 2.2小節)
譯註: 就是 這樣啦 char alpha ="abcdefghijklmn";
the c++ programming language ,third edition by bjarne stroustrup.
、、、、、、、、、、、、、、、、、、、、、、、、、、、///
/、、、、、、、、、、、、
/該問題涉及到資料型別初始化的問題,現將c語言中資料型別初始化總結如下
簡單變數的初始化形式如下: 資料型別 變數名=初始化值;
例如,定義整型變數a,並給其初始化值10的語句如下
int a=10;
陣列的初始化,需要通過一常量資料列表,對其陣列元素分別進行初始化,形式如下:
資料型別 陣列名稱〔陣列長度〕=;
例如,定義長度為5的整型陣列,並對其初始化的語句如下:
int a[5]=;
結構體變數的初始化方式與陣列類似,分別給結構體的成員變數以初始值,而結構體成員變數的初始化遵循簡單變數或陣列的初始化方法。具體的形式如下:
struct 結構體識別符號
;struct結構體識別符號 變數名=;
例如,定義struct point型別變數,並初始化的語句如下:
struct point op1=;
struct point型別變數op1的三個成員變數的值分別為
op1.x=0.0,
op1.y=0.2
op1.z=0.3
由於定義結構體變數有三種方法,因此初始化結構體變數的方法對應有三種,上面已經介紹了其中的一種形式,其他兩種形式如下:
struct point
op1=; struct
op1=;
在初始化結構體變數時候,既可以初始化其全部成員變數,也可以僅僅對其中部分的成員變數進行初始化。例如:
struct student
a= ;
其相當於a.id=0;a.name=「」;a.***=『/0x0』。
僅僅對其中部分的成員變數進行初始化,要求初始化的資料至少有乙個,其他沒有初始化的成員變數由系統完成初始化,為其提供預設的初始化值。各種基本資料型別的成員變數初始化預設值如表9-1所示。
資料型別
預設初始化值
int 0
char 『/0x0』
float 0.0
double 0.0
char array[n] 」
int array[n]
對於複雜結構體型別變數的初始化,同樣遵循上述規律,對結構體成員變數分別賦予初始化值。例如:
struct line
oline1=,
};其中常量0用於初始化oline1的基本型別成員變數id;常量列表用於初始化oline1的struct point型別成員變數startpoint;常量列表用於初始化oline1的struct point型別成員變數endpoint。
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...
結構體初始化
結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...
Linux GNU C結構體陣列初始化示例
突然心血來潮,想學習一下結構體陣列的初始化方面的知識。gcc特有的陣列初始化的風格 陣列賦值另一種方式,但只在gcc下編譯通過,g 不能 enum 只對感興趣的索引值進行賦值,而不管下標的順序 static const int regs 這種風格在kernel 中經常看到。它不按照陣列下標順序,而是...