【发布时间】:2016-04-22 23:47:03
【问题描述】:
我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改,我假设传递的数组是一个指针,并且更改指针应该会更改数组,对吗?有人可以解释在这种情况下发生了什么吗?
感谢您的帮助。
int main(){
int i, length = 10;
int array[length];
for (i = 0 ; i < length ; i++)
array[i] = i * 10;
printf("Before:");
print(array, length);
change(array, length);
printf("After:");
print(array, length);
return 0;
}
// Print on console the array of int
void print(int *array,int length)
{
int i;
for(i = 0 ; i < length ; i++)
printf("%d ", array[i]);
printf("\n");
}
// Change the pointer of the array
void change(int *array,int length)
{
int *new = (int *) malloc(length * sizeof(int));
int i;
for(i = 0 ; i < length ; i++)
new[i] = 1;
array = new;
}
我希望看到以下输出:
Before:0 10 20 30 40 50 60 70 80 90
After:1 1 1 1 1 1 1 1 1 1
我得到了什么:
Before:0 10 20 30 40 50 60 70 80 90
After:0 10 20 30 40 50 60 70 80 90
【问题讨论】:
-
从不,甚至不用于测试。
-
那你能给点建议吗?谢谢
-
数组是
main和change中的一个局部变量。它的地址从main传递到change。之后,change可以重新分配它,它不会影响main中的数组。这两个变量不相关。现在,change可能会更改array的内容,在这种情况下main也会看到更改。 -
看看我的回答,你就明白我的意思了。对于编译器
for(int i=0;i<length;i++)是完全可读的,但对于人类......最好是for (int i = 0 ; i < length ; i++)。此外,在同一行中编写多个语句会使阅读变得更加困难。 -
不要将 malloc 用于此类任务。 Try this.
标签: c arrays function pointers