数组长度为什么不能是变量?

如题所述

数组的大小不能用变量表示的,是因为在编译连接期间内存要按照你制定的长度给数组分配相应的内存空间,如果是变量的话就没有办法给它分配了,你可以用符号常量来解决,在开头用:

# define m 100

# define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数

C语言里,所有变量空间都是在程序运行之初向系统申请的,包括和指针,它也需要空间,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。解决的办法如前面所说,如:

int a[n];

可改为

int* const a = (int*)malloc(sizeof(int)*n);

这样a变量就完全可以当作一个数组直接使用了,包括a[1]之类的。因为“[]”中括号运算符做的只是偏移其内的地址数并取值。如:

a[1]

等价于

*(a + 1)

而const修饰符在星号之后,则表示指针在被声明后不能改变,即只能指向这个获取的空间,完全符合数组的性质。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-03-25
c99标准支持数组长度为变量,你用的是较新的编译器
第2个回答  2018-01-25
定义数组必须是需要知道定多大的,不然编译器根本不知道你要分配的内存有多大。但是有些特殊情况,中括号里面可以是空的,比如:
char str[] = "abc";
这个只是你没写大小而已,但编译器帮你分配了4个字节的大小给str,包括3个字符和字符串结束符'\0'
另一种情况就是出现在结构体里面,比如:
struct A
{
int n;

char str[];

};
这里的str属于一个柔性数组,是不定长的,详情可以百度百科看柔性数组是什么意思。这个结构体大小就只有4个字节,后面的需要使用的时候才分配。这种只能在结构体里面使用,其他地方定义的数组必须要分配好数组的大小,如果想要用变量就需要用到动态数组,也就是new一段内存出来。
不知道我说那么多你是否明白。

数组长度为什么不能是变量?
数组的大小不能用变量表示的,是因为在编译连接期间内存要按照你制定的长度给数组分配相应的内存空间,如果是变量的话就没有办法给它分配了,你可以用符号常量来解决,在开头用:define m 100 define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数。C...

C语言中数组长度不能用变量定义吗?
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。所以,解决的办法便是通过malloc函数,即 int a[n];可改为 int* c...

数组的长度
数组的长度是个常量表达式,可以包含整型常量、常整型变量和符号常量(整型)。但不能包含变量。

C语言数组长度可以是一个变量吗
不可以 因为不好编译 不过可以用malloc()申请一段堆内存 这个长度是可变的

请问C++的字符串string类为什么数组中不能为变量?
因为数组在C++中是静态存在的,它占用一定的空间(也就是固定长度),在数组当前所在函数运行中是不能改变其长度的(函数结束就消失),一旦改变了长度,数组所在内存区就会出现空缺,导致出错!你在int n=5之前不添加const声明为常变量,系统将认为你“企图”在运行中修改数组长度,所以不予通过。

为什么在c++中定义数组时数组的常量表达式不能包含变量?
你放变量在里面,当然编译期间都不知道这个数组的大小,当然不行了。这类变量一般是在栈上分配空间,只不过不同类型变量位于栈的不同段。有些变量是在运行期间分配空间的,这样的变量里面可以有变量,因为变量的值在运行期间可以确定,系统就知道为它分配多少空间。但一般这类变量是在堆上分配空间。

C语言中可以定义不定长度的数组(即数组长度由变量确定)吗?
最后补充一点,楼上有人说数组的长度不能用变量来确定,这是错误的。 C中有 变长数组 的概念呀(c99标准),“变长”的意思就是 可以用变量来指定数组的长度,而数组一旦创建 长度就无法变化了,而且变量必须赋值在先,变长数组才能创建。某些人不能因为无法正确的设置编译器支持c99标准,而否定了 变...

变量 数组长度C语言
不可以的,C语言规定只能用常量定义数组长度 不过可以这么使用 定义一个足够长的数组,比如100,然后k和m比完以后,用k-1或者k-2作为数组的上界就可以了

定义数组时,数组的长度可以是变量???急求解!!谢谢
在我所有已知的语言中,静态数组的长度都不可以是变量,这个可以参考语法:char arr[10];但是,如果是动态数组,则长度可以是变量,比如char p = new char[length];另一种可能的情况是数组封装类,这个不同语言有不同实现,比如java中的Array,比如STL中的向量类等等。

在定义数组时,数组大小必须是常量,不能使变量或变量表达式?
C99\/C11新增了变长数组,可以用变量表示数组大小。声明一个简单的一维数组形式如下:type name [ size ];这里,type是数组中每个元素的数据类型,name是数组名,size是数组元素的个数。对于传统的C数组,要求size是整型常量表达式。但是C99\/C11允许使用整型非常量表达式,这种情况下的数组被称为变长数组。

相似回答