在单独定义并输出一个一维数组的时候,发现输出结果有问题。貌似在某一个数之后,数组的输入和输出就会出错。具体错误及代码如图:
找同学询问得知。错误出在数组的定义上有问题。
因为数组的大小一开始并不知,要根据输入的n的大小来决定,所以在数组定义时就没有明确其大小,直接定义成了静态数组a[n]。但是这样的语句是错误的,因为静态数组在一开始定义时必须明确数组大小,不能直接定义一个未知数n上去。因为每次输入的n是变化的,不确定的,因此必须采用动态数组来定义。
明确问题的出处之后开始修改代码!
静态数组定义为
以int类型为例子:
int a[具体数字]
而动态数组的定义比较复杂,这里同样也以int类型举例:
int *a = (int*)malloc(n*sizeof(int))
上述语句看似很长,但实际上很好理解。
① int *a代表定义一个指向整数的指针,他本身并不代表定义一个数组。但是由于数组在函数上下文中会被解释为指向数组第一个元素的指针,因此,如果你有一个数组,你可以通过一个指针来访问和修改数组的元素。故在此处定义为 int *a;
② malloc(n*sizeof(int))表示动态分配n个int类型大小的内存空间空间;
③由于malloc分配空间后会返回一个void*类型的指针,该指针指向新分配空间的首地址。由于在上文中定义的数组类型是int型,故需要对malloc返回的void*类型的指针进行强制类型转换,将其转换成int*。
除了定义之外,动态数组还要增加malloc分配空间是否成功的判断语句,以及在函数的末尾加上释放多余空间的语句。如下:
分配空间是否成功的判断语句:
if(a==NULL){
printf("分配空间失败");
return 1;}
释放空间的语句:
free(a);