c - 当我打印它时,指向二维数组的指针会更改地址

标签 c pointers codeblocks multidimensional-array

我似乎无法理解为什么我的指针在这种情况下会改变地址:

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/

相关文章:

c - 为什么代码使用2个指针变量

c - 将二维数组元素分配给单个指针

c - 指向整数并再次返回的指针

windows - Opencv安装代码块

c++ - 如何使用代码块编译 64 位 SDL 代码(没有管理员权限)

c - 我正确加载我的字符数组吗?

命令行参数,打印列和行

c++ - 为什么 Visual C++ 自动矢量化器不矢量化这个简单的循环?

c++ - 为什么字符序列//(* 会更改代码块 12.11 中源文件其余部分的字体?

凯撒密码在 C 中不起作用