有个关于数组定义的问题想请教一下大家

pang123hui 2010-05-22 11:38:02
今天看到了2种不常见的数组定义

一个是:char a[] = {0};
另一个是:char a[0];

这些使用起来都没有报错,也没有警告,可总觉得肯定是不标准的用法

应该是利用了编译器不检查数组越界的特点来写的

谁可以给我详细讲讲啊,谢谢
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesi3344 2010-05-22
  • 打赏
  • 举报
回复
第一种让编译器帮你代劳计算个数

第二种还真傻 逼
pang123hui 2010-05-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 challenge99 的回复:]
为什不标准呢?

只是有没有意义的问题
第一个是没什么意义了
第二个要看用在什么地方, 比如

struct msg {
int len;
char data[0];
};

struct msg *m;

m = malloc(data_len + sizeof(struct msg));
然后就可以用m->data
[/Quote]

可第一种用法完全可以正常的使用
如:

#include <stdio.h>
int main(int argc, char *argv[])
{
char a[] = {0};

a[0] = 1;
a[1] = 2;
a[2] = 3;

printf("%d,%d,%d",a[0],a[1],a[2]);
return 0;
}


第二种,我想起来了,你那种举例是C语言的柔性数组吧
challenge99 2010-05-22
  • 打赏
  • 举报
回复
为什不标准呢?

只是有没有意义的问题
第一个是没什么意义了
第二个要看用在什么地方, 比如

struct msg {
int len;
char data[0];
};

struct msg *m;

m = malloc(data_len + sizeof(struct msg));
然后就可以用m->data
challenge99 2010-05-22
  • 打赏
  • 举报
回复
char a[] = {0};

a[0] = 1;
a[1] = 2;
a[2] = 3;
这说明不了什么问题

i=0;
while(1) {
a[i] = i;printf("%d\n",i);
i++;

}

69,382

社区成员

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

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