[心得]關於array initialization (陣列初始化) …
看板C_and_CPP (C/C++)作者ikari512 ( //StrategyBass)時間16年前 (2008/11/28 00:49)推噓3(3推 0噓 6→)留言9則, 5人參與討論串1/1
UPDATE 2010-06-18 : 以下文章有兩個地方有問題,請直接參考
Array initialization (陣列初始化) in C
http://ikariwing.blogspot.com/2008/11/array-initialization.html
因為blog更新比較簡便(上色、排版...),所以一直持續有修改和補充
這邊就沒改了,請多多包含...
========================================================================
最近在版上問了一些關於array initialization的問題,還和高手同學討論了一下
稍微整理筆記如下,來討論看看有沒有錯...
以下都用gcc 4.1.2測試
(1.)array宣告了但沒初始
int num[10]; //沒初始
去讀的話,都是垃圾值
(2a.)array宣告了,但只有部份初始(版本1)
int num[10];
num[0] = 999;
除了num[0]以外,也都是垃圾
(2b.)array宣告了,但只有部份初始(版本2,用大括弧)
int num[10] = {1,2,3}; //沒初始完全
因為用大括弧,沒初始的部份會自動補成0
這是因為...
(節錄自tinlans大,英文是C99的一段)
[...If there are fewer initializers in a brace-enclosed list than there are
elements or members of an aggregate, or fewer characters in a string
literal used to initialize an array of known size than there are elements
in the array, the remainder of the aggregate shall be initialized implicitly
the same as objects that have static storage duration.
array 和 struct 這類東西在程式語言裡都被歸類為 aggregate (聚合資料)...]
粗略說就是...
如果aggregate型別(如array/struct)初始不完全,而且又是用大括弧方式初始,
就會像static變數一樣,自動把沒初始到的部份補0
所以,我們又可以知道
以下這種初始方式:
int num[10] = {0};
可以說對,也可以說錯 //問題1,應該是對的 programmer依照spec來做並沒有錯
因為照標準,這是部份初始化,又是array,所以其他也都會是0,看起來好像有初始效果
但這只是部份初始化的順帶效果,算你好運
如果compiler沒照標準,這樣就只有對第一個元素給值,其他就看天意,所以也算錯
而且這樣會造成誤解,以為會全部都設成0 //問題2,應該說 會誤解成全部設成同一個值
int num[10] = {255}; //之前版友的例子
這樣其實只有第一個是255,其他都會是自動補的0,不是全部都是255
所以最好乖乖來,用memset,或是loop去初始
以上,有錯請鞭 ._./~
--
// IKARi
擁有追隨自己內心與直覺的勇氣,你的內心與直覺多少已經知道你真正想要成為什麼樣的
人,任何其他事物都是次要的。
Steve Jobs
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.168.181.96
推
11/28 11:08, , 1F
11/28 11:08, 1F
推
11/28 11:20, , 2F
11/28 11:20, 2F
推
11/28 11:28, , 3F
11/28 11:28, 3F
※ weii:轉錄至看板 SFFamily 11/28 11:50
→
11/28 14:19, , 4F
11/28 14:19, 4F
→
11/28 17:17, , 5F
11/28 17:17, 5F
→
11/28 17:17, , 6F
11/28 17:17, 6F
※ 編輯: ikari512 來自: 140.113.215.185 (11/28 17:36)
XXX → ikari512:MOONRAKER:測試結果是垃圾 11/28 17:36
修正:我腦包了,以為M大要我測試,其實是在解釋原因,Thx!
→
11/28 19:03, , 7F
11/28 19:03, 7F
→
11/29 00:43, , 8F
11/29 00:43, 8F
→
11/29 21:25, , 9F
11/29 21:25, 9F
※ 編輯: ikari512 來自: 218.168.183.242 (12/01 04:14)
※ 編輯: ikari512 來自: 114.25.178.7 (06/18 12:47)
※ 編輯: ikari512 來自: 114.25.178.7 (06/18 15:39)
※ 編輯: ikari512 來自: 114.25.178.7 (06/18 15:39)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12