关于#c语言#的问题:_ 已知地址 整数6的地址是 0x16b16b31c

img

根据图片:

_ 已知地址 整数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将存储在何处。这可能不会出什么错,也可能会擦除数据或代码,或者导致程序崩溃。