[問題] char 多種宣告判斷正確與否

作者: TimmyDD (道元博士)   2016-10-02 22:26:38
各位大大你們好,最近在寫一些面試考古題,
自己觀念不太好,寫到其中一題,腦袋如同醬糊一般黏死了。
在此求救各位QAQ
以下有七種char宣告方式,要選出正確的
(1) char *name = "XYZ WW1B";
(2) char *name[10] = "XYZ WW1B";
(3) char name[7] = "XYZ WW1B";
(4) char *name[8] = "XYZ WW1B";
(5) char name[10] = "XYZ WW1B";
(6) char name = "XYZ WW1B";
(7) char name[10] = {"XYZ WW1B"};
小弟只覺得(5),(7)是對的,其他錯的又說不清楚理由,
還懇請各位相助,幫忙釐清觀念,謝謝!
作者: bibo9901 (function(){})()   2016-10-02 22:32:00
跑一下不就知道了嗎?
作者: jacky1989   2016-10-02 23:09:00
3、6一定是錯的3->宣告的空間不夠6->根本不是字串陣列
作者: CoNsTaR ((const *))   2016-10-02 23:14:00
7 一定是錯的 連 type 都不對了
作者: jacky1989   2016-10-02 23:17:00
2 3 4 6是錯的,至於10我剛剛有試跑一次,是可以編譯的講錯,是7,但是我不知道這樣宣告到底算不算對
作者: wtchen (沒有存在感的人)   2016-10-02 23:32:00
1是字串常數,使用上有點限制,請看置底13誡
作者: CoNsTaR ((const *))   2016-10-03 02:57:00
真的耶 7 好像真的沒問題 不知道是什麼原因 XD
作者: jacky1989   2016-10-03 03:39:00
這是我的個人理解啦!因為{}是集合用法,那(7)也是一堆元素構成的集合,只是這個是只有一個元素的集合,所以在邏輯上,這個也行得通,我理解是這樣,有錯請指教
作者: CoNsTaR ((const *))   2016-10-03 06:24:00
int i = {7}; 這句也是合法的,我想應該是一樣的道理不過是啥道理我就不懂了 XDDD
作者: jfcherng (小霹靂)   2016-10-03 07:17:00
list initialization
作者: CoNsTaR ((const *))   2016-10-03 07:57:00
樓上,可是我用 -std=c99 耶
作者: uranusjr (←這人是超級笨蛋)   2016-10-03 09:30:00
(7) 應該是 compond literal 自動展開的效果, 但標準沒有規定這樣用的效果, 應該是 implementation depedent的 undefined behaviour, 不算正確 (即使結果沒問題)以 coding style 來看, 正確的應該只有 5; 以標準來看 1也合法, 但容易出錯 (見置底 13 戒之 4)
作者: g0010726 (Kevin)   2016-10-03 10:11:00
1的話 C++17 變成illegal啦

Links booklink

Contact Us: admin [ a t ] ucptt.com