根据图片:
_ 已知地址 整数6的地址是 0x16b16b31c
尝试通过地址 0x16b16b31c 获取该值(6),但是各种方法都不对 请问是哪里错了 我的思路是不是不对 或者我对这个的理解是否有问题。_
望采纳,点击右侧采纳即可:
你的代码不对的地方在于,地址0x16b16b31c是运行代码时动态分配的,并不能预先确定。而且代码中p的地址赋值为0x16b16b31c是不合法的,因为不能直接操作内存地址,可能导致程序崩溃。改为正确的代码应该是这样的:
int i=6;
printf("&i=%p\n", &i);
int *p=&i;
printf("p=%p, *p=%d\n", p, *p);
*p=11;
printf("p=%p, *p=%d\n", p, *p);
执行结果:
&i=0x地址
p=0x地址, *p=6
p=0x地址, *p=11
代码可能存在以下问题:
访问了未分配的内存地址 0x16b16b31c,导致程序崩溃。
未对指针进行初始化,可能造成指针指向随机地址,从而访问到无效地址。
使用了未知的库文件,可能导致编译错误。
您的代码存在以下错误:
首先,printf语句中的格式字符串有误,应为"%d\n",而不是"p -> d"。
其次,访问内存地址0x16b16b31c可能是不安全的,因为这可能不是您的应用程序分配的内存。
可以看出,您试图通过地址获取该值,但实际上不能通过地址直接获取值,需要使用指针。
为了解决这些问题,可以将代码修改为以下内容:
#include <stdio.h>
int main() {
int i = 6;
int *p = &i;
printf("%d\n", *p);
return 0;
}
关于这个问题:
// c prime PLUS
int* pt;//未初始化指针
*pt = 5; //严重的错误
**解引用未初始化的指针**
说道注意事项,一定要牢记一点:千万不要解引用未初始化的指针。
为何不行?第二行的意思是把5储存在pt指向的位置。但是pt未初始化,其值是一个随机值,所以不知道5将存储在何处。这可能不会出什么错,也可能会擦除数据或代码,或者导致程序崩溃。