You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中将char*强制转换为int*后读取值为随机数的原因求解

问题原因分析
  • 指针解引用的内存访问宽度差异:常见系统中char类型占1字节内存,int类型占4字节内存。你将char*类型的指针强制转为int*后,对ptr4解引用时,系统会从k的起始地址开始连续读取4字节内存作为int类型的值。而你定义的char k仅有效占用了起始的1字节(存值10),剩下的3字节属于栈上未初始化的随机垃圾内存,取值不确定,所以*ptr4每次运行都会输出随机值。
  • 违反C语言严格别名规则:C标准规定,不能用不兼容类型的指针访问实际存储的对象,你用int*类型指针访问char类型的变量,属于未定义行为,程序运行结果不受标准约束,出现任何异常输出都是符合预期的。
正确写法参考

如果你想获取k的值并转为int类型,应该对指针指向的值做类型转换,而非转换指针本身,示例如下:

#include <stdio.h>
int main() { 
  char k = 10;
  char* ptr3 = &k;
  int val = (int)*ptr3; // 直接转换指向的char值为int类型
  printf("*ptr3  = %d val  = %d\n", *ptr3, val); 
  return 0;
}

运行后两个输出都会是10,符合预期。

内容的提问来源于stack exchange,提问作者Hayato Koyama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:45:03