關於C C 中陣列元素的初始化

2022-05-10 20:42:08 字數 1434 閱讀 6349

對於一維陣列,其初始化有乙個錯誤的觀點是:一直以為 int a[256]=;是把a的所有元素初始化為0,int a[256]=;是把a所有的元素初始化為1.

陣列可以用乙個列值來初始化,例如

int v1 =;

char v2=;

當陣列定義時沒有指定大小,當初始化採用列表初始化了,那麼陣列的大小由初始化時列表元素個數決定。所以v1和v2分別為 int[4] 和char[4]型別。如果明確指定了陣列大小,當在初始化時指定的元素個數超過這個大小就會產生錯誤。例如:

char   v3[2] =;   //錯誤:太多的初始化值了

char   v3[3] =;   //正確

如果初始化時指定的的元素個數比陣列大小少,剩下的元素都回被初始化為 0。例如

int   v5[8]=;

等價於

int   v5[8]=;

從這裡可以看出,為啥我們想把陣列元素初始化為0的時候,用int a[256]=是完全正確的,但是int a[256]=卻僅僅是把第乙個元素初始化為1,後面元素全部都是0。

此時情況與1維時類似,例如:

int a[8][8]=;

則可以將陣列a中所有的元素均初始化為0。

如果是:

int a[8][8]=;

則可以將a[0][0]至a[0][7]八個元素賦值為1到8,a[1][0]=9,a[1][1]=10.其餘元素全部為0.

對於n維陣列a:

int a[d1][d2][d3]…[dn] = ;

會將1,2,3,4….等值依次賦值給a[0][0]….[0]開始按照最後乙個維度不斷遞增的各個位址。

說明:本文的以上結論均在vc6.0環境下做過實驗測試,證明無誤,暫時不確定在其他的編譯環境下是否如上文所述。

另外,陣列的初始化若初始化為0的話,還可以用:

int matrix[8];

memset(matrix,0,8*sizeof(int));

int matrix[8][8];

memset(matrix,0,64*sizeof(int));

但是如果是想用其他非零值初始化非char型陣列的話,則不能用上述的方式,因為memset是針對於每乙個位元組進行賦值的。例如:

int matrix[8];

memset(matrix,2,8*sizeof(int));

因為int占用4個位元組,故而最後matrix每乙個元素得到的初值實際上是:0x2222(16進製制),而不是2.但如果陣列是char matrix[8]則可用上述方式賦值。

關於C C 初始化

1 使用函式進行初始化 void memset void s,int ch,size t n 將s中前n個位元組 typedef unsigned int size t 用 ch 替換並返回 s 在使用之前,c中引入string.h,而c 中引入cstring 1 初始化整數陣列 const int...

關於C C 初始化

1 使用函式進行初始化 void memset void s,int ch,size t n 將s中前n個位元組 typedef unsigned int size t 用 ch 替換並返回 s 在使用之前,c中引入string.h,而c 中引入cstring 1 初始化整數陣列 const int...

c c 陣列初始化誤區

char sztmp 256 char sztmp2 256 一開始總認為sztmp的值就全部是0,sztmp2的值全部是1.結果列印一看,sztmp的值就全部是0,但是sztmp2的第乙個值是1,其他的全部是0 原因 int sztmp 256 第乙個元素是顯式地初始化為var,其餘元素是隱式地初...