菜鸟问题
一、定义数组
#define M20
float x[M+5],y[7-2][M] 这样定义数组是可以的
而 int n=10,a[n]; 这样为什么定义数组就不可以了?
二、
main()
{ int n[3],i,j,k;
for(i=0;i<3;i++)
n[i]=0
k=2;
for(i=0;i<k;i++)
for(j=0;j<3;j++)
n[j]=n[i]+1;
printf("%d\n",n[1]);
}
上面这个程序输出的结果是3还是1,为什么?
问题点数:0、回复次数:5Top
1 楼steedhorse(晨星)回复于 2004-08-04 14:03:06 得分 0
1。宏的展开是编译时的,而变量初始化是运行时的。C语言中,定义数组时指定的长度必须是个编译时能够确定的数,如10,一个宏,或者一个编译时可以求指的表达式。
2。编译通不过的。Top
2 楼debugGirl(都市女孩)回复于 2004-08-04 14:03:28 得分 0
定义一个数组是,数组的大小可以是常量表达式,但C是不允许对数组的大小进行动态定义的。你的定义float x[M+5],y[7-2][M],M是一个宏定义,所以他相当于一个常量,而int n=10,a[n];中的n确实一个变量,所以是不允许的。Top
3 楼shifan(Lothander)回复于 2004-08-04 14:04:31 得分 0
一,c里面要求申明数组的大小要是常量,因为c编译器是预先决定大小的
二,这个自己运行一下不就知道了?实在不明白就step嘛,一步一步地看。应该是3
另外n[i]=0少一个分号Top
4 楼debugGirl(都市女孩)回复于 2004-08-04 14:14:08 得分 0
输出结果是3,不过你的程序里n[i]=0的后面少个分号。
原因嘛:外循环,当i=0,j=0时,n[0]=1,j=1时,n[1]=n[0]+1=2,j=2时,n[2]=n[0]+1=2;
当i=1,j=0时,n[0]=n[1]+1=3,j=1时,n[1]=n[1]+1=3,j=2时,n[2]=n[1]+1=3。
Top
5 楼liacw1017(梁上君子)回复于 2004-08-04 14:20:07 得分 0
1.要确定数组长度
2:可以运行,测试为 3
Top




