关于c语言数组的方括号中能不能使用变量的问题。

2024年11月29日 13:59
有5个网友回答
网友(1):

方括号里必须是一个大于零的整数常量或者常量表达式。

常量表达式(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值。

参考资料:

百度百科-数组

网友(2):

方括号里必须是一个大于零的整数常量或者常量表达式。

常量表达式(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等,或者对应的无符号类型。

参考资料来源:百度百科-数组

网友(3):

数组的方括号[]有两种使用情况。
1 定义。
当用于定义时,数组方括号[]中的是数组含有的元素个数,即定义了数组的规模。
这种情况下,按照ANSI C的标准,是不可以用变量的。
不过目前有些编译器支持了C99及以上规范,在C99下,C语言数组定义时可以使用变量。
至于编译器是否支持,定义一个以变量为规模的数组,编译一下,如果能通过,那么就是支持的,反之则是不支持。
由于并不是所有编译器支持,这样的代码就不易于移植,所以不推荐使用这种写法。如果一定需要用动态值,可以采用动态数组的方式。

2 取值。
当取数组a的第n个元素值时,可以使用a[n]的方式。
这种取值操作的情况下,是可以使用变量的。对此,任意版本的C语言都没有做限制。
不过其中的变量只能为整型系列的类型,比如char, short, int, long等,或者对应的无符号类型。

网友(4):

int a[n],是在定义一个数组,而数组的长度为n,n是一个变量,这在c语言是不允许,c语言不支持定义变长数组,因为在编译的时候,系统无法知道数组的长度是多少,也就无法为这个数组分配一个空间。
解决的方法有:
1、
#define N 5
int main()
{
int a[N];
...
return 0;
}
2、
#include
int main()
{
int n,*a;
n=5;
a=(int *) malloc(sizeof(int)*n);//动态申请一段空间,但是需要自己管理,就是说在程序结束前
//把这段内存释放掉,否则这段内存就无法被操作系统使用,就会变为垃圾,而且无法清除
...
free(a);//释放a所指的内存空间
return 0;
}

网友(5):

只是定义的时候不能用变量。a[i++]这是你前面已经定义好了的 a[10]。记住!! a[ ]方括号内可以用变量,只是定义的时候不能用变量。如果一定要用字母表示可以这样写:#define N 5
int main()
{
int a[N];
...
return 0;
}
N其实也是前面定义的一个常量。