c - 为什么取消引用指针并打印值会使程序崩溃

标签 c pointers

下面的程序给出了正确的结果

#include <stdio.h>

int main()
{
    int address = 0x00018EA0;
    int *flashLocat = (int*)address;
    printf("%x\n%x\n%x\n",address,flashLocat,&flashLocat);

    return 0;
}

输出

    18ea0
    18ea0
    180209e0

而上面的程序则采用以下方式

#include <stdio.h>

int main()
{
    int address = 0x00018EA0;
    int *flashLocat = (int*)address;
    printf("%x\n%x\n%x\n%x\n",address,*flashLocat,flashLocat,&flashLocat);

    return 0;
}

崩溃了,为什么会崩溃?如果有人回答那就太好了。提前致谢。

最佳答案

首先,您不知道地址0x00018EA0是否有效。

在第一个程序中,您没有访问内存位置0x00018EA0,您只是访问地址和指针的地址。

printf("%x\n%x\n%x\n",address,flashLocat,&flashLocat);

// address  --> is value of pointer, so it is valid
// flashLocat --> is value of pointer, so it is valid
// &flashLocat--> is the address of flashLocat, so it is valid

但是在第二个程序中,您实际上正在访问内存位置,如果地址无效,则会出现错误。

printf("%x\n%x\n%x\n%x\n",address,*flashLocat,flashLocat,&flashLocat);

// *flashLocat --> trying to access the location, can be INVALID

关于c - 为什么取消引用指针并打印值会使程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50725680/

相关文章:

c++ - C和C++相对于一元算术运算符存在差异的原因是什么 +

c++ - 如何将二维字符串数组传递给另一个类的函数

c - 当我尝试使用 write (man 2 write) 函数时,为什么这段代码会卡住?

c++ - 为什么通过 ***char 传递给函数的 nullptr 终止数组会丢失终止元素?

c - 'typedef in C' 有什么用?

javascript - 计算滑动平均值

c++ - 指向 char 数组的指针的运行时中断错误

c - 将指针的二维数组传递给函数 C 的不同方法

c、摆脱未初始化的警告错误

c - C中的指针赋值