c语言可变长数组函数用法 C语言可变长数组

C语言 可变长数组

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

创新互联建站主营定襄网站建设的网络公司,主营网站建设方案,app软件定制开发,定襄h5小程序制作搭建,定襄网站营销推广欢迎定襄等地区企业咨询

你第一种写法:

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语言可变长数组问题

可变长数组只有执行了C99标准的编译器里才可以实现, 其他如VC6.0 VS编译器都没执行这个标准,所以没法使用可变长数组,只能动态分配数组。

关于在C语言 声明带有一个变长数组参数的函数

在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。

1 直接以定长数组做参数,声明形式为:

ret_type func(int a[100]);

这里就是以100个元素的数组做参数的。

2 声明时不带长度,即:

ret_type func(int a[]);

3 以指针替代数组,即:

ret_type func(int *a);

2,3两种均可以用于变长数组。不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等。


名称栏目:c语言可变长数组函数用法 C语言可变长数组
文章路径:http://azwzsj.com/article/dodghid.html