变长数组 ?

石头翔子 2012-08-10 04:03:17
一直以来,我都非常确定,定义数组时,数组的大小必须是常数。
然而,今天实际测试发现,居然可以是变量!
直到现在,我仍然无法相信这是真的。
这个世界太疯狂,怎么会这样?


#include <stdio.h>

int main(int argc, char *argv[])
{
char *att[argc];
int i;
for(i=0; i<argc; i++)
{
att[i] = argv[i];
printf("att[%d]: %s\n",i , att[i]);
}
printf("sizeof: %d\n", sizeof(att));
return 0;
}
...全文
198 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
忘世麒麟 2012-08-10
  • 打赏
  • 举报
回复
尽量用标准来做,因为加入你的代码需要移植的话就可能会出现非常有趣+纠结的错误......
ies_sweet 2012-08-10
  • 打赏
  • 举报
回复
编译器对agrc的处理方式不同
有的在编译时将其认定为常数
属于编译器的行为
不可控制

不可以利用
不符合C的要求
夏天__ 2012-08-10
  • 打赏
  • 举报
回复
用GCC编译确实可以通过,不过这没有意义,结果是不可预料的。
IVERS0N 2012-08-10
  • 打赏
  • 举报
回复
c99
fzamygsd 2012-08-10
  • 打赏
  • 举报
回复
c99支持变长数组,

ms系列的到vs2010还不支持c99,。。。。。
图灵狗 2012-08-10
  • 打赏
  • 举报
回复
用GCC编译确实可以通过,不过这没有意义,结果是不可预料的。
nice_cxf 2012-08-10
  • 打赏
  • 举报
回复
新标准好像支持,
石头翔子 2012-08-10
  • 打赏
  • 举报
回复
是GCC才支持的
http://hi.baidu.com/%B0%AE%D0%C4%CD%AC%C3%CB_%B3%C2%F6%CE/blog/item/5422a8599f0782262834f024.html
这个功能,真是太棒了。。。
实际测试,VC6,VS2010不支持
Corner 2012-08-10
  • 打赏
  • 举报
回复
你用什么编译的……VS2005编译失败
1>c:\practmp\test\test\test.cpp(925) : error C2057: 应输入常量表达式
1>c:\practmp\test\test\test.cpp(925) : error C2466: 不能分配常量大小为 0 的数组
1>c:\practmp\test\test\test.cpp(925) : error C2133: “att”: 未知的大小

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧