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

将int数组强制转换为char数组的内存访问疑问

问题解答

首先看你的代码:

int* array = new int[5];
array[0] = 65;
array[1] = 66;
array[2] = 67;
array[3] = 68;
array[4] = 69;
char *arr = (char*)array;

第一个问题:int数组的每个4字节是否会变为char数组的每个1字节?

是的,完全正确。

  • 通常int在主流系统中占4字节,char固定占1字节。当你把int*强制转为char*后,指针的访问步长从4字节(每次跳一个int)变成了1字节(每次跳一个char)。
  • 你举的数值例子里,比如array[0]=65对应的二进制是00000000 00000000 00000000 01000001,这段4字节内存会被拆成4个char元素,但具体哪个字节对应arr的哪个索引,取决于系统的字节序:
    • 小端序(主流x86/x86_64架构):低字节存在内存低地址,所以arr[0]是01000001(即ASCII的'A'),arr[1]、arr[2]、arr[3]都是0;
    • 大端序:高字节存在内存低地址,所以arr[0]是0,arr[3]才是01000001。

第二个问题:char数组arr是否可以访问0-19的索引?

可以。

  • new int[5]分配了连续的20字节内存(5个int × 4字节/int),arr指向这段内存的起始地址。
  • C++标准允许用char*(或unsigned char*)来访问任意对象的内存表示,这是合法的类型双关操作。只要你访问的范围在分配的20字节内(0-19索引正好覆盖全部内存),就不会触发未定义行为,可以正常访问每个字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:02:35