下面的程序给出了正确的结果
#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/