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

C语言int数组转char指针后零值成因及获取元素20的方法

问题解析:char指针访问int数组的字节输出与目标元素获取

一、输出中零值的逻辑

  • 核心前提:当前系统中int类型占4字节,char类型占1字节,且采用小端字节序(多字节数据的低字节存储在内存低地址处)。
  • 数组tab里的每个int元素,比如4,对应十六进制为0x00000004。按小端存储规则,内存中字节顺序为04 00 00 00(低字节在前)。
  • 当你把int*类型的数组首地址强制转为char*后,p[i]会按字节逐个读取内存。因此访问第一个int元素的4个字节时,输出4 0 0 0;第二个int元素6(0x00000006)的内存字节是06 00 00 00,对应输出6 0 0 0,以此类推。
  • 元素20的十六进制是0x00000014,内存字节顺序为14 00 00 00,所以对应输出中第17到20位(i=16至i=19)的20 0 0 0。

二、通过指针p获取元素20的方法

有两种直接可行的实现方式:

  1. 转回int*类型后按数组索引访问
    既然p本质指向int数组的首地址,转回int*类型即可正常按int元素的方式访问:

    // 数组索引形式
    printf("%d\n", ((int*)p)[4]);
    // 指针偏移形式
    printf("%d\n", *( (int*)p + 4 ));
    

    这里的4是20在tab数组中的下标(数组从0开始计数)。

  2. 按字节偏移后转回int*访问
    每个int占4字节,20是第5个元素(下标4),相对于首地址的字节偏移量为4 * 4 = 16。将p+16的地址转回int*后解引用:

    printf("%d\n", *( (int*)(p + 16) ));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:40:55