课后作业结构体函数参数及返回值疑问
#include <stdio.h>struct Date
{
int year;
int month;
int day;
};
struct Record
{
char name;
int age;
struct Date first;
struct Date second;
};
struct Record getInput(struct Record record)
{
printf("请问姓名是:");
scanf("%s", record.name);
printf("请问年龄是:");
scanf("%d", &record.age);
printf("请问是否接种过疫苗(Y/N):");
getchar();
if (getchar() != 'Y')
{
record.first.year = 0;
printf("请尽快接种疫苗!\n");
}
else
{
printf("请输入第一针疫苗接种的日期(yyyy-mm-dd):");
scanf("%d-%d-%d", &record.first.year, &record.first.month, &record.first.day);
printf("请问是否接种第二针疫苗(Y/N):");
getchar();
if (getchar() != 'Y')
{
record.second.year = 0;
printf("请尽快接种第二针疫苗!\n");
}
else
{
printf("请输入第二针疫苗接种的日期(yyyy-mm-dd):");
scanf("%d-%d-%d", &record.second.year, &record.second.month, &record.second.day);
}
}
putchar('\n');
return record;
}
void printRecord(struct Record record)
{
printf("姓名:%s,年龄:%d\n", record.name, record.age);
if (record.first.year == 0)
{
printf("未接种疫苗!\n\n");
}
else
{
printf("第一针疫苗接种日期:%d-%d-%d,", record.first.year, record.first.month, record.first.day);
}
if (record.first.year != 0 && record.second.year == 0)
{
printf("未接种第二针疫苗!\n\n");
}
else if(record.first.year != 0)
{
printf("第二针疫苗接种日期:%d-%d-%d\n\n", record.second.year, record.second.month, record.second.day);
}
}
int main(void)
{
struct Record r1, r2, r3;
r1 = getInput(r1);
r2 = getInput(r2);
r3 = getInput(r3);
printRecord(r1);
printRecord(r2);
printRecord(r3);
return 0;
}
问题1 struct Record getInput(struct Record record) 这条函数语句括号里 struct是类型名 形参是Record record吗??还是在形参里对结构体Record定义为recor变量了?
问题2 函数getInput中 return的是record,但函数语句里的返回值是Record 为什么?为什么不能 struct record getinput(struct Record record),
结构体函数的参数,返回值,何时定义结构体变量,结构体变量能定义多次不同的名字吗? 问题1:在函数声明和定义中,`struct Record` 是结构体类型名,`record` 是参数名。 `struct Record getInput(struct Record record)` 这条函数语句中,`(struct Record record)` 是定义函数的参数,并且可以使用`record` 来引用这个参数。
问题2:在函数定义中,返回值的类型是 `struct Record`,而不是 `Record`,是因为在 C 语言中,结构体类型的声明需要以 `struct` 关键字开头。所以在函数声明和定义中,返回类型需要写成 `struct Record`。同时,也可以将函数声明改写成 `struct Record getInput(struct Record record)`。
结构体函数的参数可以定义为结构体类型的变量,也可以是结构体类型的指针。而结构体函数的返回值也可以是结构体类型或者指向结构体的指针。
至于结构体变量,可以多次定义不同的名字。比如可以定义一个`struct Record r1` 和 `struct Record r2`,它们是两个不同的结构体变量,但是它们有相同的结构体类型。每个结构体变量都会占用内存,并且具有自己的属性值。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 问题1:在这个函数声明中,"struct Record" 是返回类型,而 "record" 是函数的参数名。在函数参数列表中使用结构体类型名是一种常见的写法,表示参数是一个结构体类型的变量。
问题2:在函数定义中,返回类型为 "struct Record",这里的 "struct" 是可以省略的,因此可以写成 "Record getInput(struct Record record)"。实际上,返回类型和参数类型都可以省略 "struct" 关键字。
结构体函数的参数和返回值都可以是结构体类型,也可以是结构体类型的指针。在函数内部对结构体变量进行操作时,可以直接引用结构体成员,无需重新定义结构体变量。结构体变量可以定义多次,每次定义的变量可以有不同的名字,用来存储不同的数据。
回复来自于CHAT-GPT。回复仅供参考,如有人工回答,最佳答案请优先选择人工 这里面,struct Record 均可以被替换为 Record。其含义一样。(除了结构体定义处不能替换)
1. 类型是 struct Record,变量是 record。
2. Record 是返回值的类型。struct Record 的含义与 Record 一样,都是 Record 本身这个类型,但 record 不一样 ,是 Record 类型的一个变量,作为一个参数输入到了函数中。在函数中,该实参被进行了一些操作步骤,最后返回该 record 变量。 6 3 4
页:
[1]