当前位置:首页 » 编程语言 » c语言可变长数组

c语言可变长数组

发布时间: 2023-03-29 12:10:45

A. C语言支持可变长数组吗,如果可以请举例书名。谢谢

c99以前的版本是没有的,数组大小必须是常量或者是常量表达式,c99版本才加入变长数组,如:
int add(int n)
{
int a[n];
......
}
即使它叫做变长数组,但是数组大小一旦确定就不能改变了。
很多书里面都有介绍,如《深入理解计算机系统》

B. 怎么用C语言定义一个无限长的数组

C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。

比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。

但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。


1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。

通过下面例子来理解该方法:

#include<stdio.h>
#include<stdlib.h>

intmain()
{
intsize=100;//最初为100个元素空间。
int*a=NULL;
inti=0;

a=malloc(sizeof(int)*size);
if(a==NULL)return-1;
while(scanf("%d",a+i)==1)//循环向a中输入数据,直到输入非数值字符为止
{
i++;
if(i==size)//数组空间不足
{
size*=2;//将数组空间扩大二倍,也可以改用size+=100;之类的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空间
if(a==NULL)
{
return-1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
}
}
}

if(a)free(a);//对申请的内存进行释放。
return0;
}

从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。

如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。

所以这种方法可以做到软件意义上的无限大数组空间。


但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。


2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

C. C语言如何定义一个可变大小的数组

在C语言中,数组的大小是在定义的时候就需要确定的,不然编译的时候进行分配内存时,会使计算机不知道该分配多少内存单元而报错。


然而,可以根据定义一个链表来达到可变的效果。

链表节点定义如下:

struct
{
intdata;//数据域
structnode*next;//指针域
}*node;
structnodehead,p;
head->data=4;
head->next=p;
p->data=5;

类似的可以将一个节点看成是数组中的一个元素,需要增加元素的时候,就增加链表的节点就可以了。

D. C语言中怎样定义一个可变大小的数组呢我想根据自己的需要输入数组的大小,谢谢啦

定义动态数组,例如:
#include <stdio.h>
#include <stdlib.h>
int len;
char *str;
printf("输入数组的长度:");
scanf("%d",&len);
str=(char*)malloc(len*sizeof(char));
为str分配分配len个字符大小的空间。

热点内容
瑞纳自动买哪个配置 发布:2024-11-02 20:18:45 浏览:559
sql复制数据库结构 发布:2024-11-02 20:18:43 浏览:582
yaf编译 发布:2024-11-02 20:06:30 浏览:126
小数除以大数怎么算法 发布:2024-11-02 19:44:59 浏览:810
安卓手机如何重新设置付款密码 发布:2024-11-02 19:31:44 浏览:980
多巴胺3mg静脉注射怎么配置 发布:2024-11-02 19:25:50 浏览:618
源码之城 发布:2024-11-02 19:24:43 浏览:513
国军标环境存储要求 发布:2024-11-02 19:23:04 浏览:107
sql多行转多列 发布:2024-11-02 19:17:52 浏览:119
linuxftp文件夹权限 发布:2024-11-02 19:17:03 浏览:899