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
相关产品推荐
相关产品推荐

