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

为何int指针可通过void指针指向char类型数组?

问题解析:int指针为何能通过void指针指向char数组

先看你的代码:

char arr[] = {0,1,2,3};
void *vp;
int *ip;

vp = arr; 
ip = vp; 

核心原因是void*是C语言里的通用指针类型,它的设计就是用来兼容任意数据类型的指针:

  • 第一步vp = arr;:数组名arr会隐式转换成char*指针,而C标准允许任何非函数指针直接赋值给void*,不需要强制转换。
  • 第二步ip = vp;:C标准同样允许把void*转换回任意非函数指针类型,这里就是转成int*,语法上完全合法(部分编译器可能会弹出警告,但不属于语法错误)。

不过要注意,这种写法存在潜在风险:

  • char类型通常占1字节,int类型多数平台占4字节。当你用ip去解引用(比如*ip)时,会一次性从arr的起始位置读取4个char字节,把它们当作一个int值。这会涉及字节序问题(比如小端平台下*ip的值是0x03020100,大端平台则是0x00010203)。
  • 如果char数组的长度不足一个int的字节数,用int指针访问会直接触发数组越界,导致未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:40:47