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

C语言中结构体数组传参后打印仅输出地址的问题排查

解决结构体数组打印只输出地址的问题

嘿,我一眼就看到问题所在啦!你遇到的打印地址而非实际值的情况,核心原因是结构体Date的成员定义出错了,咱们一步步来解决:

问题根源分析

你定义的Date结构体里,day和month被声明成了数组类型:

struct Date { 
    char week_day[30]; 
    int day[31];  // 这里是数组,不是单个日期值
    int month[12]; // 同样是数组,不是单个月份值
};

当你在printf里写hol[i].date.day时,数组名会自动退化为指向数组首元素的指针,所以打印出来的就是内存地址,而非你想要的具体日期数值。

另外你的printf语句还有语法错误(末尾的...),格式符和参数的对应关系也需要调整。

修正方案

1. 修正结构体定义

把Date里的day和month改成单个整数类型——毕竟一个假期的日期是具体的某一天、某个月,不需要用数组存储:

struct Date { 
    char week_day[30]; 
    int day;  // 单个整数存储日期
    int month; // 单个整数存储月份
};

struct Holiday { 
    char name[80]; 
    struct Date date; 
};

2. 修正打印函数

调整printf的格式字符串,确保每个格式符对应正确的参数,同时补全语法;另外我额外加了一个count参数,用来指定要打印的假期数量,避免硬编码i<2,让函数更通用:

void printHols(struct Holiday hol[], int count) {
    printf("Holidays in 2018\n");
    for (int i = 0; i < count; i++) {
        // 格式符和参数一一对应:%d对应int,%s对应字符串
        printf("%d / %d \t - %s \t - %s\n", 
               hol[i].date.day, 
               hol[i].date.month, 
               hol[i].date.week_day, 
               hol[i].name);
    }
}

3. 完整可运行测试代码

下面是包含结构体初始化和函数调用的完整代码,直接就能运行:

#include <stdio.h>

struct Date { 
    char week_day[30]; 
    int day; 
    int month; 
};

struct Holiday { 
    char name[80]; 
    struct Date date; 
};

void printHols(struct Holiday hol[], int count) {
    printf("Holidays in 2018\n");
    for (int i = 0; i < count; i++) {
        printf("%d / %d \t - %s \t - %s\n", 
               hol[i].date.day, 
               hol[i].date.month, 
               hol[i].date.week_day, 
               hol[i].name);
    }
}

int main() {
    // 初始化两个假期数据
    struct Holiday holidays[] = {
        {
            "New Year's Day",
            {"Monday", 1, 1}
        },
        {
            "Christmas Day",
            {"Tuesday", 25, 12}
        }
    };
    
    // 调用打印函数,传递数组和元素数量
    printHols(holidays, 2);
    return 0;
}

运行效果

执行这段代码后,你会得到正常的输出:

Holidays in 2018
1 / 1 	 - Monday 	 - New Year's Day
25 / 12 	 - Tuesday 	 - Christmas Day

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:57:32