c语言中定义数组长度与不定义数组长度有什么区别

2021-01-07 18:14:14 字数 5764 阅读 6466

1楼:

c语言是低级的高级语言,不会提示越界,你可以在定义5个长度呃字符数组里面输入7个字符,但是定义长度并不是没用的,编译器会专门开辟5个字符长度留给这个数组,是专用的,因此你输入7个字符后,后两个字符其实是超标领养,用了别人家的资源(可能占用了其他变量的空间),并且很容易就没娘要了(容易出错)。如果程序简单,或许出错的几率比较小,例如你只定义了这个数组的话,也不会有别的东西来干扰他,他也不会干扰别的东西,但是程序一旦复杂起来,内存空间比较拥挤,那么出错是难免的。因此有时我们要自己去实现越界提示这个功能,但是显然这样会降低程序的效率。

一楼的答案也值得参考,他说的我就不说了。

c语言中数组的下标和定义数组的长度有什么区别呢?

2楼:匿名用户

长度和下标不同的就是:长度是从第一位开始计算的就是1。长度为50的话直接n=50 下标:是从0开始的,如果50位的话n=49

3楼:匿名用户

数值下标就是数值长度的值,数组下标的作用就是可以轮番调用数组内每一位元素,数组下标从0开始有效

4楼:匿名用户

嗯!楼上两位说的都对,选我吧、

c语言中定义一个数组可以不写数组的长度吗?

5楼:匿名用户

不可以,如果不能确定长度,请用stl库里的list,map,set等数据类

或者开的数组开的大一些,保证你不回会越界,答多余的部分不适用就好在定义的数组的时候,可以通过变量定义长度如:

scanf("%d", arraylen);

int data = new int[arraylen];

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

6楼:晓喋

1、c语言e68a8462616964757a686964616f31333365646235中不支持。

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。

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的指向

8楼:旷起云戊静

只是定义来数组的话是不行的,你源百可以把bai数组定度du义成指针,用zhic语言中的问

malloc来分配空间,因为dao这是你手动分配的,在不用之后答要手动释放。

你可以如下申请

int**u

=(int

**)malloc(sizeof(int*)*m);for(int

i=0;

i

i++)

这样专u这个指针就相当于属一个可变的2维数组u[m][n]了释放时用free

9楼:匿名用户

你可以试试用指针呀,或者是把m,n定义得足够大。数组的长度在定义的时候必须是一个确定的值。

10楼:程振

数组的大复小不能用变量表制示的哦,因为

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

# define m 100

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

11楼:墨派

数组大小要求是常量!当然不能是变量了!

你的问题可以这样解决:

先算出m,n的值,

再用new去申请

如:int a;

int *pa=new a[m][n];

12楼:

先定义一个足够大的二维数组 例:

u[100][100]

13楼:匿名用户

只是定义数组的话是不行的,你可以把数组定义成指针,用c语言中的 malloc来分配空回间,因为这是你手动答分配的,在不用之后要手动释放。

你可以如下申请

int **u = (int **)malloc(sizeof(int *) * m);

for(int i=0; i

14楼:匿名用户

动态分配内存,c用malloc

c++,用new

15楼:cabbage包菜

定义数组的时候,copy数组的大bai小必须确定,并且是du整型。

在c99中提出了变长

zhi数组,即为val,意dao

思是你可以用一个变量去代替数组的大小。

例如 int val = 5;

int a[val];

变长数组中的变,也只是说你可以用变量去定义数组,但是变长数组的大小在创建后就是不变得,

而且变长数组必须的自动的存储类。

由于变长数组的限制太多了,很少人去使用他。

所以对你这个问题,需要使用动态内存,即用malloc calloc 这类的函数。

16楼:钻时封芯

只是不行的,一般也不必这么做

17楼:劼翾

不能,这你可以使用动态存储分配。方法是:

int *p=new int [m][n]中间应用,用完后记得使用

delete [ ]p

好了,给分吧。呵呵

18楼:匿名用户

c语言中不支持来。

c++中支持变长自

数组(你可以自行度bai娘变长数组和dualloca函数),但是因为其实在zhi栈上分配,不被推

dao荐使用。

做为解决方案,你可以使用c式的malloc函数或者c++式的new函数来在堆上动态分配内存,这样长度是完全可以自定的。

c语言里面 数组都要事先定义长度吗 ?

19楼:12345额时代

c语言数bai组的长度是预先定义好的

du,在整个程zhi序中固定不变。操作dao方法如下:

1、首回先,点

击进人visual studio,然后新建答一个c项目。

2、接着,在源**中添加c项目所使用的头文件,输入即可,如下图所示。

3、首先定义一个整型数组array,将其长度设置为4。

4、然后定义一个整型数据length,该参数用来储存数组长度,点击即可。

5、获得数组长度需要使用函数sizeof,利用该函数将数组所包含的数据位数除以该数据的位数即可,输入即可。

6、然后,点击运行相关**,可以看到成功获取了数组的长度。

20楼:匿名用户

数组必bai须是固定长度du,但是可以通过动态zhi内存申请来实dao现你的要求。内

unsigned int *pallscores;

main()}

21楼:plus彭路

在数组一

bai章中,曾介绍过du数组的长度zhi是预先定义好的, 在整个程dao序中固定不变专。属c语言中不允许动态数组类型。例如:

int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明, 这是错误的。但是在实际的编程中,往往会发生这种情况, 即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题, 用数组的办法很难解决。

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

常用的内存管理函数有以下三个:

1.分配内存空间函数malloc

2.分配内存空间函数 calloc

3.释放内存空间函数free

22楼:百载千番

是的,而且要定义数组类型。比如整数数组就是: int a[k]; 其中a是数组名,k是数组长度

23楼:匿名用户

c99中有动态

数组,例如

int n;

scanf("%d", &n);

int array[n];

c89不能这么用

///////////////////////////////////

也可以动态分配内存内。malloc

int *array = 0, num, i;

printf("please input the number of element: ");

scanf("%d", &num);

// 申请容动态数组使用的内存块

array = (int *)malloc(sizeof(int)*num);

24楼:邱桂新

我给你一个bai例子du,你运行一下就明白zhi了:

#include

#include

int main()

如何定义不定参数函数,C++定义栈怎么定义,该有什么函数

1楼 匿名用户 举个例子 ,传入不定参数函数printf typedef int fun const char void func fun fp int main c 定义栈怎么定义,该有什么函数 2楼 千锋教育 1 进栈 push 算法 若top n时,则给出溢出信息,作出错处理 进栈前首先检查栈...

C语言,定义二维数组a,则(a+1)表示什么a+5)表示什么

1楼 倒霉孩子改名啦 a 1 相当于a 0 1 , a 5 相当于a 0 5 已经越界了 c语言 二维数组 a 1 1 和 a 5 分别表达什么? 2楼 匿名用户 a 1 a 1 那么 a 1 1 a 1 1 a 5 a 5 c语言定义了一个二维数组a 5 3 用循环实现a 0 0 a 1 0 a ...

c生成指定长度的字母数字组合,c# 输出26个字母和10个数字的所有组合?求完整代码

1楼 匿名用户 string str new string 6 console writeline 请输入要生成的6位字符 以回车分隔 str 0 console readline tostring str 1 console readline tostring str 2 console read...