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

C语言使用指针访问结构体内嵌数组 如何输出目标字符而非内存地址

问题根因
  • 格式符使用错误:最后一行打印语句使用了地址输出格式符%p,字符输出需要使用%c格式符。
  • 表达式计算结果类型错误:(arr_struct+1)->arr+1 是指向数组第二个元素的指针,不是元素本身,需要对指针解引用才能拿到存储的字符值。
修复方案

把main函数里最后一行printf语句修改为以下任意一种写法即可:

  1. 数组下标写法(可读性更高):
printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],(arr_struct+1)->arr[1]);
  1. 指针运算写法(和原代码逻辑对齐):
printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],*((arr_struct+1)->arr+1));
修复后完整代码
#include <stdio.h>
#include <stdlib.h>
void int_array(int *arr)
{
    *arr=10;
    *(arr+1)=20;
}
struct struct_ex
{
    int i;
    char arr[5];

};
void struct_array(struct struct_ex *arr)
{
    
    arr->i=10;
    arr->arr[0]='a';
    arr->arr[1]='b';
    (arr+1)->i=20;
    (arr+1)->arr[0]='c';
    (arr+1)->arr[1]='d';
    
}


int main()
{

    int *arr=malloc(sizeof(int)*2);
    int_array(arr);
    printf("%d %d\n",*arr,*(arr+1));
    
    struct struct_ex *arr_struct=malloc(sizeof(struct struct_ex)*2);
    struct_array(arr_struct);
    printf("- %d %c,%c\n",arr_struct->i,arr_struct->arr[0],arr_struct->arr[1]);
    printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],(arr_struct+1)->arr[1]);
    
    // 已修改行
    printf("- %d %c,%c\n",(arr_struct+1)->i,(arr_struct+1)->arr[0],(arr_struct+1)->arr[1]);
    
    return 0;

}
运行输出
10 20
- 10 a,b
- 20 c,d
- 20 c,d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:21:02