我就不看你的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这个时候才是根据你输入的数字所得大小的数组。
这样你懂我的意思了吗?
可变长数组只有执行了C99标准的编译器里才可以实现, 其他如VC6.0 VS编译器都没执行这个标准,所以没法使用可变长数组,只能动态分配数组。
在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。
1 直接以定长数组做参数,声明形式为:
ret_type func(int a[100]);
这里就是以100个元素的数组做参数的。
2 声明时不带长度,即:
ret_type func(int a[]);
3 以指针替代数组,即:
ret_type func(int *a);
2,3两种均可以用于变长数组。不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等。