本来想试一下数组拷贝问题,然后发现 copy 函数无法正常运行,是怎么回事?在 copy 函数运行完后会停顿一段时间,且打印数组不会显示。
# include<stdio.h>
void print(int *nlist, int length){
int i;
for (i = 0; i < length; i++)
printf("%d ", nlist[i]);
printf("\n");
}
int *copy(int *nlist, int length){
int i;
int *output;
for (i = 0; i < length; i++)
output[i] = nlist[i];
return output;
}
int main(){
int i;
int a[5] = {1, 2, 3, 4, 5};
int *b, *c;
b = a;
print(b, 5);
c = copy(a, 5);
print(c, 5);
return 0;
}
指针和数组的关系没有理解清楚,数组名可以理解为一个特殊指针,将定义数组拆开,即定义数组分为1.定义一个指针,2.分配一段连续空间,3.该指针指向这片空间。至此完成数组的定义。你的copy函数中只是定义了一个指针,它指向哪呢?不好意思,它指向一片未知空间,C语言允许访问位置空间,所以你的程序没有报错,简言之,你将数组复制到了一片未知空间,然后又因为该指针是在函数中定义,该指针是一个临时变量,函数返回时就不再拥有使用权,总之你在向未知区域写入数据,程序挂不挂掉取决于你访问的未知区域会不会影响到本程序或者其他程序。
个人理解,希望对你有帮助!