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

int类型数组能否存储字符,char类型数组能否存储整数值?

C语言int数组存储字符、char数组存储整数的底层原理

你给出的示例代码运行后会输出49491111,该现象的核心逻辑可以拆解为三点:

  • char本质是1字节整数类型
    C语言中没有独立的「字符」存储逻辑,所有字符都是以对应ASCII码的整数值存储的,'1'、'a'这类字符字面量本身的类型就是int,对应值分别是十进制的49、97,直接赋值给int数组元素和存储普通整数没有任何差异。
  • 合法范围的整数可以跨小整数类型赋值
    只要赋值的数值在目标类型的取值范围内,操作就是完全合法的:
    • int的取值范围远大于ASCII码的0~127区间,存储字符不会发生溢出
    • 11、21这类小整数也在char的常规取值范围内(无符号char为0255,有符号char通常为-128127),存入char数组不会出错
  • printf的整型提升规则匹配输出逻辑
    使用%d格式符输出时,传入的char类型参数会自动做整型提升,转为int类型后再被printf读取,所以会直接输出存储的整数值,符合运行预期。

注意:如果给char类型赋值超出其取值范围的整数,会发生数值截断,有符号char场景下属于未定义行为,日常开发需要避免这类操作。

附示例代码注解:

int main(void) {
    int arri[] = {'1' , '2', 'a'};
    int *ptri = arri;
    char arrc[] = {11, 21 ,  31 };
    char *ptrc = arrc;
    printf("%d" , *arri); // 输出'1'对应的ASCII码49
    printf("%d" , *ptri); // 指针指向首元素,和上面等价,输出49
    printf("%d" , *arrc ); // 输出char数组存储的整数值11
    printf("%d" , *ptrc); // 指针指向首元素,和上面等价,输出11
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:12:03