关于c语言数组的方括号中能不能使用变量的问题。
main()
{int n=5;
int a[n];
……
}
说是错误的。
但我又在一个例子里看到:
main()
{int i,a[10];
for(i=0;i<10;)
a[i++]=i;
……
}
我就在想他咋又可以用a[i++]呢? 展开
常量表达式(const experssion):是指值不会改变 并且在编译过程就能得到计算结果的表达式。字面量属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定。
const int a =1; //常量表达式
cosnt int b=a+1; //常量表达式
int c=2; //初始值是字面值常量,当c数据类型是普通int。
扩展资料:
1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
2.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
3.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)
4.若不给可初始化的数组赋初值,则全部元素均为0值。
参考资料:
常量表达式(const experssion):是指值不会改变 并且在编译过程就能得到计算结果的表达式。字面量属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定。
const int a =1; //常量表达式
cosnt int b=a+1; //常量表达式
int c=2; //初始值是字面值常量,当c数据类型是普通int。
扩展资料:
数组的方括号[]有以下使用情况:
1、定义
当用于定义时,数组方括号[]中的是数组含有的元素个数,即定义了数组的规模,这种情况下,按照ANSI C的标准,是不可以用变量的。
2、取值
当取数组a的第n个元素值时,可以使用a[n]的方式。
这种取值操作的情况下,是可以使用变量的,不过其中的变量只能为整型系列的类型,比如char, short, int, long等,或者对应的无符号类型。
参考资料来源:百度百科-数组
1 定义。
当用于定义时,数组方括号[]中的是数组含有的元素个数,即定义了数组的规模。
这种情况下,按照ANSI C的标准,是不可以用变量的。
不过目前有些编译器支持了C99及以上规范,在C99下,C语言数组定义时可以使用变量。
至于编译器是否支持,定义一个以变量为规模的数组,编译一下,如果能通过,那么就是支持的,反之则是不支持。
由于并不是所有编译器支持,这样的代码就不易于移植,所以不推荐使用这种写法。如果一定需要用动态值,可以采用动态数组的方式。
2 取值。
当取数组a的第n个元素值时,可以使用a[n]的方式。
这种取值操作的情况下,是可以使用变量的。对此,任意版本的C语言都没有做限制。
不过其中的变量只能为整型系列的类型,比如char, short, int, long等,或者对应的无符号类型。
解决的方法有:
1、
#define N 5
int main()
{
int a[N];
...
return 0;
}
2、
#include<stdlib.h>
int main()
{
int n,*a;
n=5;
a=(int *) malloc(sizeof(int)*n);//动态申请一段空间,但是需要自己管理,就是说在程序结束前
//把这段内存释放掉,否则这段内存就无法被操作系统使用,就会变为垃圾,而且无法清除
...
free(a);//释放a所指的内存空间
return 0;
}
int main()
{
int a[N];
...
return 0;
}
N其实也是前面定义的一个常量。