免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2462 | 回复: 9
打印 上一主题 下一主题

一道c++面试题,挑错。不解,望高手指教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-18 11:50 |只看该作者 |倒序浏览
int const size1=2;
char str1[size1];
int tmp=0;
cin>>tmp;
int const size2=tmp;
char str2[size2];

编译时会出现什么错误?为什么?

论坛徽章:
0
2 [报告]
发表于 2009-01-18 13:31 |只看该作者
int const size2=tmp;

这句错了, C++primer有很详细的解释.

论坛徽章:
0
3 [报告]
发表于 2009-01-18 15:18 |只看该作者
我用gcc编译就没出错啊,用cl编译倒是出错,但是是char str2[size2];这一句,把这句删了也能正常编译。查了查c++ primer 3也没查到。楼上的给讲一讲?

论坛徽章:
0
4 [报告]
发表于 2009-01-18 15:43 |只看该作者
我想应该是这样的:
int const size2是一个指向不可改变值的地址,如果给他以temp,即对一个不可改变的地址赋予一个可变地址值,是错误的

论坛徽章:
0
5 [报告]
发表于 2009-01-18 17:04 |只看该作者
数组空间必须在程序初始化时分配好。
int size1 = 10;
char str[size1]; 能通过是因为在编译时就已经知道数组大小

cin>>tmp;
int const size2=tmp;
char str2[size2];是因为无法在程序初始化时知道数组大小。

论坛徽章:
0
6 [报告]
发表于 2009-01-18 17:11 |只看该作者

回复 #4 babyyou_0049 的帖子

int const size2=tmp;
这句是对的。这里不是const指针

论坛徽章:
0
7 [报告]
发表于 2009-01-18 17:13 |只看该作者

回复 #5 gz80 的帖子

从c99以后数组就支持动态分配,数组的初始化不再是编译时的问题,而是运行时。这个以前论坛上好想出现过一次。

论坛徽章:
0
8 [报告]
发表于 2009-01-18 17:54 |只看该作者
运行时,受教受教。

论坛徽章:
0
9 [报告]
发表于 2009-01-18 20:35 |只看该作者
貌似是int const size2=tmp;
这里不能用变量给变量赋初值,linux 上也会报这错误!

论坛徽章:
0
10 [报告]
发表于 2009-01-18 21:44 |只看该作者
申请数组编译期间要要知道数组大小才行
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP