每天顶呱呱 2023-12-23 20:43 采纳率: 50%
浏览 5
已结题

C语言刚学到指针没明白这里为什么报错

为什么会报错难道不能这么强制转换后取值么(刚接触c)

img

#include<stdio.h>
int main() {
    int i = 100;
    int* p = &i;//指针p中保存i对应的内存地址
    int c = &p; //p的地址
    int a = *p;//指针p指向内存地址对应的值
    printf("%d\n", p);//打印i的内存地址
    printf("%d\n", &i);//打印i的内存地址
    printf("%d\n", c);//打印p的地址
    printf("%d\n",*p);//打印指针p指向内存地址对应的值
    printf("%d\n",a);//打印指针p指向内存地址对应的值
    *p = 50;//直接使用指针修改原始变量i的值
    printf("%d\n", i);//修改后i的值就是50int f = 2;//定义一个整形的数据
    int t = &f;//将其地址赋值给一个整形变量t
    printf("f的地址是%d\n", t);
    //因为整形变量t不是指针类型所以要先强转成指针类型再修改值(此时*(int*)t应该等于f的值2int h = *(int*)t;
    printf("将变量t强转为指针类型后取出对应地址的值%d\n",h);
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 柯本 2023-12-23 22:03
    关注

    因为你的编译器是64位的,它的int *是8字节而int只有4字节,你将指针赋给int后,丢掉了4个字节数据,它的内存位置就不对了,出错是正常的
    当然,你用老式32位编译器就不会有这个问题的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月23日

悬赏问题

  • ¥15 求解答一下是否可以修改一个软件运行时生成的文件内部内置的文件创建时间?
  • ¥15 求在R环境下用corrplot画一个相关图
  • ¥20 WIN10蓝屏问题!
  • ¥15 Mac经常自动关机,再次打开后提示“电脑因出现问题而重新启动”
  • ¥60 使用ovito软件怎么得到金属玻璃的自由体积
  • ¥15 急!如何实现根据汇编指令推测硬件功能?
  • ¥20 excel处理10000万条数据方法
  • ¥15 hc32串口接收数据
  • ¥15 阻抗控制阻尼参数过小报错
  • ¥15 在Unity开发环境中用NPOI插件输出Word文档可以,当我打包到Windows系统软件的时候输出Word文档就出现文件损坏