[问题] 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