C 中陣列初始化

2021-09-06 16:51:05 字數 1559 閱讀 5734

#include

using std::cout;

using std::endl;

int arr1[5];

int arr2[5] = ;

int main()

;int *pi1 = new int[5];

int *pi2 = new int[5]();

for(int i = 0; i != 5; i++)

cout << arr1[i] << " ";

cout << endl;

for(int i = 0; i != 5; i++)

cout << arr2[i] << " ";

cout << endl;

for(int i = 0; i != 5; i++)

cout << arr3[i] << " ";

cout << endl;

for(int i = 0; i != 5; i++)

cout << arr4[i] << " ";

cout << endl;

for(int i = 0; i != 5; i++)

cout << *(pi1 + i) << " ";

cout << endl;

for(int i = 0; i != 5; i++)

cout << *(pi2 + i) << " ";

cout << endl;

return 0;}

windows xp sp3下 visual studio 2005 編譯執行的結果:

windows xp sp3下eclipse + cdt + mingw 編譯執行的結果:

ubuntu linux 8.04下eclipse + cdt + g++ 編譯執行的結果:

由以上的三組結果中前四個陣列的初始化結果是同樣的,可得到下面結論:

對於元素為內建型別的陣列

arr1:靜態分配、定義在函式體外、未使用初始化列表顯式初始化,元素都初始化為0;

arr2:靜態分配、定義在函式體外、初始化列表中未提供初值的元素初始化為0;

arr3:靜態分配、定義在函式體內、未使用初始化列表顯式初始化,不正確元素進行初始化;

arr4:靜態分配、定義在函式體內、初始化列表中未提供初值的元素初始化為0;

三組結果中的後兩個陣列初始化的結果似乎是依賴於編譯器的,而mingw與g++的結果竟然還不同(mingw的結果也太詭異了)。當中第一組(ms編譯器)初始化陣列的結果和c++ primer(第四版)中講到的動態分配的陣列初始化規則是一致的,即動態分配陣列時,假設陣列元素是內建型別,則無初始化,如pi1。也可使用跟在陣列長度後面的一對空圓括號,對陣列元素做值初始化,如pi2。

C 陣列初始化

定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通過其位址間接地訪...

C 陣列初始化

c 陣列初始化 定義 int pia new int 10 array of 10 uninitialized ints 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。在自由儲存區中建立的陣列物件是沒有名字的,只能通...

C 陣列初始化

c 的陣列初始化是在宣告陣列時將初始值放在大括號 之內。如果沒有指定初始值,則陣列成員將自動初始化為該陣列型別的預設初始值。請閱讀陣列的屬性。如果將陣列宣告為某型別的字段,則當例項化該型別時它將被設定為預設值null。一 一維陣列的初始化 1.在宣告陣列時將其初始化。如 int array new ...