关于动态数组赋值问题
代码为起泡排序,数组定义成动态之后就出现了问题,无论输入什么,最终输出的都是0,数组本身应该没问题,因为最终输出的0的个数是正确的,怀疑是赋值出现了问题,求指点#include <stdio.h>
int main()
{
int k,a, t, i, j;
scanf("%d",&k);
for(i = 0; i < k; i++)
scanf("%d",&a);
putchar('\n');
for(j = 0; j < k-1; j++)
for(i = 0; i < k-1-j; i++)
if(a > a)
{
t = a;
a = a;
a = t;
}
for(i = 0; i<k; i++)
printf("%d",a);
return 0;
} 本帖最后由 jackz007 于 2019-4-12 23:34 编辑
动态数组在确定元素数量后,还需要使用 malloc() 为数组分配存储空间,楼主的问题出在缺少这个关键环节。
#include <stdio.h>
#include <malloc.h>
main(void)
{
int k , * a , t , i , j ;
scanf("%d" , & k) ;
if((a = (int *) malloc(k * sizeof(int))) != NULL) { // 楼主少了动态分配内存的手续
for(i = 0 ; i < k ; i ++) scanf("%d" , & a) ;
for(j = 0 ; j < k - 1 ; j ++) {
for(i = 0 ; i < k - 1 - j ; i ++) {
if(a > a) {
t = a ;
a = a ;
a = t ;
}
}
}
printf("\n") ;
for(i = 0 ; i < k ; i ++) printf("%d" , a) ;
printf("\n") ;
free(a) ;// 善始善终
} else {
fprintf(stderr , "error : failure of malloc()!\n") ;
}
}
a
然后scanf("%d",&k);
数组不能这样定义
你要定义动态数组,那你可以用malloc
如下
int *a,n;
a= (int *)malloc(n * sizeof(int));
本帖最后由 Croper 于 2019-4-13 00:30 编辑
楼主说的是变长数组(vla)吧,
变长数组和动态数组是两个概念,虽然我感觉也很容易搞混,
问题在于,变长数组这个名字很有误导性,它只是在编译时其数组长度不是常量表达式,长度是变量,
并不是在运行时”变长”的,也就是说,它一旦声明,长度就是固定的。
而你在声明a时,k并没有给予初始值,因此,它的长度你就没法确定。 并且极大可能在赋值的时候发生了越界。从而得到了意外的结果。
因此,你应该把声明a的位置放到k赋值之后,像这样:#include <stdio.h>
int main()
{
int k,t, i, j;
scanf("%d",&k);
int a;
for(i = 0; i < k; i++)
scanf("%d",&a);
putchar('\n');
for(j = 0; j < k-1; j++)
for(i = 0; i < k-1-j; i++)
if(a > a)
{
t = a;
a = a;
a = t;
}
for(i = 0; i<k; i++)
printf("%d",a);
return 0;
}
另外,把所有变量在函数开头时进行声明并不是一个好习惯。这种写法只是从c89留下来的习惯而已。现在更推荐在使用变量前再声明变量。这样的程序更有可读性,在实现一个较长的函数时,你也不用在看到一个变量时翻N页去找这个变量的声明。 Croper 发表于 2019-4-13 00:02
楼主说的是变长数组(vla)吧,
变长数组和动态数组是两个概念,虽然我感觉也很容易搞混,
谢谢,虽然不懂vla是什么,但确实像你说的那样,应该像定义并输入数组个个数然后再定义数组 暗pluto 发表于 2019-4-12 23:21
a
然后scanf("%d",&k);
数组不能这样定义
谢谢,不过看不懂,其实只要先定义然后输入k就好了 jackz007 发表于 2019-4-12 23:18
动态数组在确定元素数量后,还需要使用 malloc() 为数组分配存储空间,楼主的问题出在缺少这个关键环 ...
谢谢,简单的方法只要先定义k并输入然后定义数组就好了 本帖最后由 Croper 于 2019-4-13 12:44 编辑
晴初back 发表于 2019-4-13 12:34
谢谢,虽然不懂vla是什么,但确实像你说的那样,应该像定义并输入数组个个数然后再定义数组
vla:variable length array,也就是变长数组,其实看这名字应该叫变量长度数组,这个小特性是c独有而c++不支持的 Croper 发表于 2019-4-13 12:39
vla:variable length array,也就是变长数组,其实看这名字应该叫变量长度数组,这个小特性是c独有而c ...
Ok 谢谢 晴初back 发表于 2019-4-13 12:35
谢谢,不过看不懂,其实只要先定义然后输入k就好了
两种方法都可以
页:
[1]