gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:28:02 25 4
gpt4 key购买 nike

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

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com