c语言函数可变长数组 c可变长度数组

C语言怎样定义变长数组

”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊.....)

在播州等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、成都网站设计 网站设计制作按需设计网站,公司网站建设,企业网站建设,品牌网站设计,全网整合营销推广,成都外贸网站制作,播州网站建设费用合理。

写全的话应该是

int x = 2; //x定义并赋值,当然不一定是2

char array[x];测试了一下,这样的代码在VC6.0下会报错,因为对C99新标准没有很好地实现。VS2005也不行。VS2013可以正确编译。gcc

3.2.2也可以正确编译。

c语言中长度可变的数组?

如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。

而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:

void func( int n ){int vla[2*n]; // 合法:存储周期为动态的static int e[n]; // 非法:长度可变数组不可有静态存储周期

struct S { int f[n]; }; // 非法:f不是一个普通标识符/* ... */}

C语言变长数组如何实现(接收用户数据的数组)

你的想法是可以的。

实际上C提供一个标准的库函数可以实现这个功能。

void *realloc(void *mem_address, unsigned int newsize);

譬如:

int *p = malloc(sizeof(int)*3);

p[0]=0;p[1]=1;p[2]=2;

p = realloc(p, sizeof(int)*4);

这个时候,p指向的前三个int的值还是1、2、3,而且可以对第四个int赋值了。realloc会自动把原来的数据复制到新的内存空间上去。

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

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

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

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

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

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

#include stdio.h

#include stdlib.h

int main()

{

int size=100;//最初为100个元素空间。

int *a = NULL;

int i = 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);//对申请的内存进行释放。

return 0;

}

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

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

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

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

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

c语言变长数组

int main()

{

unsigned char n;

for(n=0;n10;n++)

{

char x[n]; //注意变长数组必须在程序块内定义,不能在文件内定义

x[n]=n;

printf("%d",x[n]);

fflush(stdout);

}

return 0;

}

GCC实测通过

C语言 可变长数组

我就不看你的bubble sort的算法部分了,直接跟你讲你不知道错误的原因。

你第一种写法:

int n=1, a[n], i=0, j=0, k=0;

这里你已经定义n = 1, 而a[n]也在该行定义。

那么编译器在此就直接给a这个数列分配内存了。

也就是说你a这个数组大小就确定了,即为1。

我不知道你学了内存分配没有,简单给你讲解一下,

具体你可以在网上搜。

比如一个含有5个整数类型的数组可以这样定义a[5],

但是也可以这样获得:int *a = (int *) malloc ( sizeof( int ) * 5 );

也就是说我们给一个指针分配了内存,从而得到一个数组,

而a[5]这样定义也是需要编译器在编译程序的时候分配内存的

而编译器会根据你的代码优化你的程序,并把代码转化为汇编再者machine code

说多了,继续给你分析

你修改过的代码

int n=1, i=0, j=0, k=0;

printf("请输入数组长度:");

scanf("%d", n);

int a[n]; //修改

这个时候由于你在声明数组之前就已经读入n了,

所以a这个时候才是根据你输入的数字所得大小的数组。

这样你懂我的意思了吗?

当前标题:c语言函数可变长数组 c可变长度数组
文章URL:https://www.cdcxhl.com/article44/hjojhe.html

成都网站建设公司_创新互联,为您提供虚拟主机做网站静态网站定制网站建站公司用户体验

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司