c/c++使用{}初始化陣列需要注意的(2)
阿新 • • 發佈:2018-12-29
c/c++語言中,陣列初始化的方式主要有三種:
1、宣告時,使用 {0} 初始化;
2、使用memset;
3、用for迴圈賦值。
這次我們重點關注第1點,我們來看下面的程式碼
int main(int argc, char *argv[])
{
int a[10];
for(int i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d \n",a[i]);
}
列印結果如下:
19659704
19672824
14351412
14351412
19672824
0
14351452
17910228
1
14351492
很明顯沒有初始化後列印的是隨機值,接下來繼續:
int main(int argc, char *argv[])
{
int a[10] = {0};
for(int i=0;i<sizeof(a)/sizeof(int);i++)
printf("%d \n",a[i]);
}
由於多了初始化操作,陣列列印結果如下:
0
0
0
0
0
0
0
0
0
0
很明顯,陣列的所有值都被初始化為0了,那麼肯定有人會說如果執行 int a[10] = {1}結果會怎麼樣?:
int main(int argc, char *argv[]) { int a[10] = {1}; for(int i=0;i<sizeof(a)/sizeof(int);i++) printf("%d \n",a[i]); }
列印結果:
1
0
0
0
0
0
0
0
0
0
結果發現只初始化第一個元素為1,其餘都是0!!
結論:
初始化所有元素為0時可以用{0}來賦值,但初始化為其他值是不行的!我們可以逐個賦值或{1,12,2....}
具體是怎麼回事需要理解memset函式,下一篇會講解