我似乎无法理解为什么我的指针在这种情况下会改变地址:
int *load(FILE *fp, int * vector, int w, int h){
//other coding
int array[w][h];
int *ptr = &array;
return ptr;
}
main(){
//other coding
int *ptr = load(file, vector, w, h);
printf("%d ", *(ptr));
printf("%d ", *(ptr));
}
在我的第一个 printf("%p ", *(ptr));
中,它打印 00000010
在我的第二个 printf("%p ", *(ptr));
中,它打印 0028fc6c
并且可以肯定的是,如果我用 "%d"
打印值,第一个是好的,第二个则不是。
最佳答案
从 load()
返回的array
地址是该函数的局部变量。您永远不应该返回它的地址,因为它是在堆栈上分配的,并将在后续函数调用中重用。
您看到的更改值是因为对 printf()
的调用正在更新堆栈的该位置。
关于c - 当我打印它时,指向二维数组的指针会更改地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19240037/