C语言中数组长度不能用变量定义吗?

我现在必须定义一个可变的二维数组u[m][n]前面会算出m、n的值,然后定义这个数组不能用变量定义的话,这个问题怎么解决?... 我现在必须定义一个可变的二维数组u[m][n]
前面会算出m、n的值,然后定义这个数组
不能用变量定义的话,这个问题怎么解决?
展开
 我来答
一个戴墨镜的人ren
2019-01-01 · TA获得超过3077个赞
知道小有建树答主
回答量:977
采纳率:50%
帮助的人:93.7万
展开全部
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。所以,解决的办法便是通过malloc函数,即
int a[n];
可改为
int* const a = (int*)malloc(sizeof(int)*n);
这样a变量就完全可以当作一个数组直接使用了,包括a[1]之类的。因为“[]”中括号运算符做的只是偏移其内的地址数并取值。如:
a[1]
等价于
*(a + 1)
而const修饰符在星号之后,则表示指针在被声明后不能改变,即只能指向这个获取的空间,完全符合数组的性质
综上所述,如果需要变量控制长度的一个数组,类似“int a[n];”的,可改成“int* const a = (int*)malloc(sizeof(int)*n);”并直接作为数组以[]方式使用。const可以去掉,但要保证使用时不改变a的指向
晓喋
2018-04-05 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2536
采纳率:91%
帮助的人:1130万
展开全部

1、C语言中不支持。
C++中支持变长数组(你可以自行度娘变长数组和alloca函数),但是因为其实在栈上分配,不被推荐使用。做为解决方案,你可以使用C式的malloc函数或者C++式的new函数来在堆上动态分配内存,这样长度是完全可以自定的。

2、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

3、、在数组一章中,曾介绍过数组的长度是预先定义好的, 在整个程序中固定不变。C语言中不允许动态数组类型。例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明, 这是错误的。但是在实际的编程中,往往会发生这种情况, 即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题, 用数组的办法很难解决。

4、为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间, 也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。 其它文献中所提到的"动态数组",指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质是一个指向数组的指针变量.常用的内存管理函数有以下三个:分配内存空间函数malloc;分配内存空间函数 calloc;释放内存空间函数free。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Cabbage包菜
2012-03-20 · 超过12用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:32.9万
展开全部
定义数组的时候,数组的大小必须确定,并且是整型。
在C99中提出了变长数组,即为VAL,意思是你可以用一个变量去代替数组的大小。
例如 int val = 5;
int a[val];
变长数组中的变,也只是说你可以用变量去定义数组,但是变长数组的大小在创建后就是不变得,
而且变长数组必须的自动的存储类。
由于变长数组的限制太多了,很少人去使用他。
所以对你这个问题,需要使用动态内存,即用malloc calloc 这类的函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ytdnbfsj
2012-03-20
知道答主
回答量:11
采纳率:0%
帮助的人:9.2万
展开全部
只是定义数组的话是不行的,你可以把数组定义成指针,用c语言中的 malloc来分配空间,因为这是你手动分配的,在不用之后要手动释放。
你可以如下申请
int **u = (int **)malloc(sizeof(int *) * m);
for(int i=0; i<n; i++)
{
u[i] = (int *)malloc(sizeof(int));
}
这样u这个指针就相当于一个可变的2维数组u[m][n]了
释放时用free
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
程振1986
2012-03-22
知道答主
回答量:4
采纳率:0%
帮助的人:3.3万
展开全部
数组的大小不能用变量表示的哦,因为在编译连接期间内存要按照你制定的长度给数组分配相应的内存空间,如果是变量的话就没有办法给它分配了,你可以用符号常量来解决,在开头用
# define m 100
# define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(10)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式