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

C语言中结构体成员作为函数参数报错问题求助

C语言代码编译错误排查与修正

代码中的问题分析:

  • 函数声明、定义与调用不匹配:
    声明int sum(struct data age);表明函数接收struct data类型参数,但实际调用时传入的是int类型的my_friend.friend_age,类型完全不兼容;同时函数定义错误地使用struct my_friend作为参数类型,这不是合法的结构体类型。
  • scanf读取字符串的错误:
    scanf("%s", &my_friend.name_friend);中,name_friend是数组名,本身就是指向数组首元素的char*指针,不需要加&,加&后类型变为char (*)[50],与%s要求的参数类型不匹配。
  • 未初始化变量导致未定义行为:
    sum函数内的agein_20是局部变量,未初始化就参与计算agein_20= agein_20 + age;,局部变量默认值是随机的,会导致结果不可预测。
  • 结构体定义顺序问题:
    函数声明写在struct data定义之前,编译器此时无法识别struct data类型,虽部分编译器兼容,但不符合规范写法。

修正后的代码:

#include <stdio.h>

// 先定义结构体类型
struct data{
    char name_friend[50];
    int friend_age;
};

// 修正函数声明:接收int类型参数
int sum(int age);

struct data my_friend; 

int main(){
    int d;
    printf("Type your friends name: ");
    // 去掉多余的&,直接传递数组名
    scanf("%s", my_friend.name_friend);
    printf("Type your friends age: ");
    scanf("%d", &my_friend.friend_age);
    // 传入正确的int类型参数
    d = sum(my_friend.friend_age);
    printf("Age in 20 years: %d\n", d);
}

// 修正函数定义:参数为int类型,直接计算结果
int sum(int age)
{
    int agein_20 = age + 20;
    return agein_20;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:15:46