感谢帮助。
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
也会看到更改。 - Tom Karzesvoid f(int i) {i = 5;} int main() {int x = 0; f(x); printf("%d\n", x); return 0;}
没有输出5?难道我没有在函数内部更改x的值吗? - user253751