㈠ c语言中数组长度不能用变量定义吗
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。
㈡ C语言中怎么定义动态的数组长度
动态数组长度,对于部分新的编译器,支持C99的,可以直接用变量定义数组
比如
func(intn)
{
inta[n];
....
}
不过 有些编译器不支持 会报错
就只能使用动态数组,也就是malloc
如
func(intn)
{
int*a;
a=(int*)malloc(sizeof(int)*n);
....
free(a);
}
㈢ c语言中如何自定义数组长度
C99标准支持不定长数组(代价是不能用goto语句)。在输入语句后声明就可以了。
不过现在的编译器对C99的支持都不好```
对于ANSI C(C89)一般的编译器都支持。不过数组长度必须是编译期确定的常量,运行时不能改变。所以采用动态分配实现。
例如
#include<stdio.h>
#include<stdlib.h>/*这个头文件在用malloc和free等分配内存函数时必须被包含*/
int main()
{
int n,*a=NULL;
printf("Please input the num of elements:\n");
scanf("%d",&n);
if(!(a=(int *)malloc(n*sizeof(int)))
{
printf("Memory is not accessed!\n");
exit(1);/*内存分配失败时异常退出。也需要stdlib.h*/
}
/*如下使用方法实质是相同的*/
scanf("%d",a[0]);
scanf("%d",a+0);
/*这里写代码*/
free(a);
/*用完之后需要释放,否则会造成内存泄漏*/
}
return 0;
}
其它还有calloc、realloc等,C++里也可以用new、delete等运算符(如 confuciuskg 所述),具体用法可以直接网络。
㈣ C语言定义数组长度问题
可以是可以,但可能会引起内存不够,溢出问题,所以个人建议在函数前定义数组
㈤ C语言中可以定义不定长度的数组(即数组长度由变量确定)吗
不可以,数组在创建时长度已经确定了,而且创建后也无法更改数组的长度,楼上说的malloc动态申请的内存也是已确定的,你都不能在 不破坏原有数据的情况下改变其大小。
那怎么储存未知大小的数据呢,在储存后怎样能随意的对其添加、更改、删除、查找等一系列操作呢?只用简单的数组肯定不行,需要用到别的数据结构,如链表、二叉树等等,总有一款适合你。在大家学到数据结构与算法的时候 ,一切难题都将迎刃而解。
最后补充一点,楼上有人说数组的长度不能用变量来确定,这是错误的。 C中有 变长数组 的概念呀(c99标准),“变长”的意思就是 可以用变量来指定数组的长度,而数组一旦创建 长度就无法变化了,而且变量必须赋值在先,变长数组才能创建。某些人不能因为无法正确的设置编译器支持c99标准,而否定了 变长数组 这个用法。
㈥ 怎么在C语言中重新定义数组的长度
C语言一维数组分静态一维数组和动态一维数组两种。 一、静态一维数组,在定义的时候就已经确定其长度。如 int a[10];就是定义了一个长度为10个元素的整型数组。 静态数组不支持长度的增加。如果要增加长度,只能新定义一个更长的数组,
㈦ c语言怎么由用户定义数组长度
一般不是这样定义的,我一般都是,先定义好数组长度,如int
a[100],就是先把数组定义的比较大就可以了,然后再int
n;scanf("d%",&n);int
a[n];
㈧ 关于C语言中定义数组大小的问题(最多能定义多少)
查了一下,这个错误是栈溢出。 栈的大小是比较有限的, 不能定义这样大的东西
需要一个大的数组的话应该定义一个指针,然后用malloc分配内存空间给他,这个是在堆上分配的,可以分配很多
㈨ c语言 自定义数组长度
说明数组之前先说明变量。
所有的变量在使用之前都必须先定义。为什么呢?因为变量都是存放内存当中(当然一些存放在代码段如单片机使用关键字code的变量另算),一般每个内存单元的大小是一个字节,如果你在使用一个变量时没有事先定义它的类型,也就是说,编译器根本不知道该变量所占的内存空间的大小,变量能存放的数据范围也未知,这势必会造成紊乱,两个变量所规划的内存地盘不明确,CPU在访问时有没有越界都不知道,这样编译器当然不会帮你干这种坏事啦。所以,一个变量在使用之前必须先定义(存储方式、数据类型)。
好,再来说说数组。
数组是什么概念,有木有深刻的理解过?好,我现在说说一维数组(其实多维数组也是一样的)。
数组是一组具有相同类型并且有一定的相互关系的变量的集合。注意,每个数组元素都是一个变量。那这些有相互关系而且数据类型一样的变量是怎么存放在内存当中的呢?其实,他们是连续存放的,也就是说他们中间没有间隔不相关的内存单元。而且编译器也要事先知道你这个数组的长度是多少,才能分给你家多少内存。(就好像某某政府要分田地给老百姓,先数一下确定你家到底多少人口,才能分多少地给你家,不然不是浪费就是种田的时候种到别人家的田地去了,呵呵,是吧?这个编译器是绝对不允许的)。
所以说,一个数组在定义时必须要事先规定好这个数组的长度,这样编译器才知道怎么样分配内存空间给这个数组。这里注意一点,数组的长度必须是一个常量,变量是不行的,变量的值可以改变,编译器已经分配了多少空间给这个数组,怎么能说变就变呢?因为编译器是编译器,程序是程序,这个跟定义一个变量是一样的。
使用malloc函数,一般结合链表来用,链表存放的数据就不一定是连续的了。
等某一天你变成中国的计算机牛B人物了,可以想个办法做个超吊的编译器实现数组长度想怎么变就怎么变,哥也期待那一天,弟,你行的。
所以说,你想的太天真啦。哈哈。