数组最后一个元素后加了逗号却没问题

swl82560397pq 2010-01-15 12:24:58
#include<stdio.h>
void main(void )
{
int arrry[3] = {1,2,3};//c语言说的是这种情况
int array_a[3] = {1,2,3,};//没提到
}
上述程序没问题,为什么array_a{}3后加个逗号也是可以的呢?
...全文
2674 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
hejianli0310 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 swliao 的回复:]
引用 23 楼 hpsmouse 的回复:
引用 20 楼 swliao 的回复:
C/C++ code
#include"stdio.h"int main()
{int a[2]= {1,2,3};int m,n;for(m=0;m <3;m++)
printf("%d\n",a[m]);//输出结果好奇怪啊...int b[2]={1,2,3,};for(n=0;n ……
[/Quote]
在初始化的时候就是分别对a[0],a[1],a[2]进行赋值了。但开辟的空间只有前两个元素那么大.a[2]中存储的值并不是你想初始化的,那是他本身存储的数据.
z569362161 2010-01-15
  • 打赏
  • 举报
回复
楼主用的是VC88。

你们都问。

自己没有啊!
总问人家用什么?
tan870426 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kouwenlong 的回复:]
可以加一个逗号,方便数组的后面追加元素。
[/Quote]LUA有这种用法。。。但C没有
最后的逗号应该是没用的 C的遗留问题?
sagegz 2010-01-15
  • 打赏
  • 举报
回复
为了格式一致,可以在后面加上,
楼主用的什么编译器?
kouwenlong 2010-01-15
  • 打赏
  • 举报
回复
可以加一个逗号,方便数组的后面追加元素。
swl82560397pq 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 taodm 的回复:]
你的书不够好,不是编译器的错。
C、C++就规定了可以有多余的一个,
[/Quote]

哪本书上有写,我在c primer plus暂时没找到
forster 2010-01-15
  • 打赏
  • 举报
回复
enum一般都多写一个,
方便以后加
数组貌似一样吧
taodm 2010-01-15
  • 打赏
  • 举报
回复
你的书不够好,不是编译器的错。
C、C++就规定了可以有多余的一个,
swl82560397pq 2010-01-15
  • 打赏
  • 举报
回复
VC 6.0
  • 打赏
  • 举报
回复
楼主什么编译器啊?
chenzhp 2010-01-15
  • 打赏
  • 举报
回复
pengzhixi 2010-01-15
  • 打赏
  • 举报
回复
是你编译器的问题。不加逗号也没事的。
jinjinClouded 2010-01-15
  • 打赏
  • 举报
回复
加不加都可以的。。。
swl82560397pq 2010-01-15
  • 打赏
  • 举报
回复
14#正解啊!
看来是要多查查msdn啊呵呵。顶
swl82560397pq 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 swliao 的回复:]
引用 25 楼 swliao 的回复:
引用 23 楼 hpsmouse 的回复:
引用 20 楼 swliao 的回复:
  C/C++ code
  #include"stdio.h"int main()
  {int a[2]= {1,2,3};int m,n;for(m=0;m  <3;m++)
          printf("%d\n",a[m]);//输出结果好奇怪啊...int b[2]={1,2,3,};for(n=0;n  <3;n++)
          printf("%d\n",b[n]);//这个也不对..return0;
  }
  很奇怪的结果..是什么原因呢..
  输出结果为:
  1
  2
  2293680
  1
  2
  2
  是因为数组最后一个要保存'\0'吗..?这也不对啊..又不是字符串..


  这有什么好奇怪的?
  明显越界……
  一个 int[2] 给了三个 int 来初始化,你的编译器竟然没报错,我倒是很奇怪。

你是不是搞错了啊..我这是数组的初始化呢..看清楚没有呢..?又不是赋值给a[2]..真是...

噢..我好像明白了..int a[2]表示只有2个int型元素..?意思是只有a[0]和a[1]..我以前一直以为是int a[2]表示有a[0],a[1]和a[2]三个元素呢..
My God...我以前写的代码..
[/Quote]

确实是my god啊!
swl82560397pq 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 z569362161 的回复:]
int array_a[3] = {1,2,3,};//但是我还是要批评你,研究什么不好,专门研究这个没意义的东西。

                              //以后不要这么写了。这么写是错误的。
[/Quote]
在代码中用宏控制的时候会碰到这个问题,没有跟有,那控制起来差很多。
不知名小ITer 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 swliao 的回复:]
引用 23 楼 hpsmouse 的回复:
引用 20 楼 swliao 的回复:
C/C++ code
#include"stdio.h"int main()
{int a[2]= {1,2,3};int m,n;for(m=0;m <3;m++)
        printf("%d\n",a[m]);//输出结果好奇怪啊...int b[2]={1,2,3,};for(n=0;n <3;n++)
        printf("%d\n",b[n]);//这个也不对..return0;
}
  很奇怪的结果..是什么原因呢..
  输出结果为:
  1
  2
  2293680
  1
  2
  2
  是因为数组最后一个要保存'\0'吗..?这也不对啊..又不是字符串..


这有什么好奇怪的?
明显越界……
一个 int[2] 给了三个 int 来初始化,你的编译器竟然没报错,我倒是很奇怪。

你是不是搞错了啊..我这是数组的初始化呢..看清楚没有呢..?又不是赋值给a[2]..真是...
[/Quote]
噢..我好像明白了..int a[2]表示只有2个int型元素..?意思是只有a[0]和a[1]..我以前一直以为是int a[2]表示有a[0],a[1]和a[2]三个元素呢..
My God...我以前写的代码..
不知名小ITer 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 hpsmouse 的回复:]
引用 20 楼 swliao 的回复:
C/C++ code
#include"stdio.h"int main()
{int a[2]= {1,2,3};int m,n;for(m=0;m <3;m++)
        printf("%d\n",a[m]);//输出结果好奇怪啊...int b[2]={1,2,3,};for(n=0;n <3;n++)
        printf("%d\n",b[n]);//这个也不对..return0;
}
很奇怪的结果..是什么原因呢..
输出结果为:
1
2
2293680
1
2
2
是因为数组最后一个要保存'\0'吗..?这也不对啊..又不是字符串..


这有什么好奇怪的?
明显越界……
一个 int[2] 给了三个 int 来初始化,你的编译器竟然没报错,我倒是很奇怪。
[/Quote]
你是不是搞错了啊..我这是数组的初始化呢..看清楚没有呢..?又不是赋值给a[2]..真是...
zxlzym 2010-01-15
  • 打赏
  • 举报
回复
int[a];就表示分配了a个int型空间,初始化的个数大于a的话,编译器会有警告...但一样可以执行出来,出来的数据就是随机值...
楼主的问题:int array_a[3] = {1,2,3,};中初始化了四个元素,但还有一个你没有分配具体的空间,
这样的话,编译器会有一个警告但一样可以执行出来..
2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 swliao 的回复:]
C/C++ code
#include"stdio.h"int main()
{int a[2]= {1,2,3};int m,n;for(m=0;m<3;m++)
printf("%d\n",a[m]);//输出结果好奇怪啊...int b[2]={1,2,3,};for(n=0;n<3;n++)
printf("%d\n",b[n]);//这个也不对..return0;
}
很奇怪的结果..是什么原因呢..
输出结果为:
1
2
2293680
1
2
2
是因为数组最后一个要保存'\0'吗..?这也不对啊..又不是字符串..

[/Quote]
这有什么好奇怪的?
明显越界……
一个 int[2] 给了三个 int 来初始化,你的编译器竟然没报错,我倒是很奇怪。
加载更多回复(10)

70,017

社区成员

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

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