没有直接的方式可以一次读入(scanf)一个结构。
在函数内使用结构体,和普通变量一样是传值类型,相当于是拷贝过去一个一个结构体。
比如这样:
Int a(struct a b)
{
Int a;
Float b;
};
这样就会传送过去一个名为a的结构体变量,这个变量的名字叫b,包含ab两个元素。
当然更推荐传指针过去啦!因为在c语言里直接传递数据是拷贝的方式去传递的。
在一个结构体里:
Struck point{
Int x;
Int y;
}myday;
想要访问这个结构体的地址,就需要指向这个结构体:
Struck point *p = &myday;
(首先表示了这是一个结构体,然后指明了是哪个结构体,接下来再选中了一个结构体的特定变量,让指针指向这个变量)
(其实结构体可以看成一种 自己规定 的数据类型)
在这里
想要访问具体的每一个成员,则需要用->符号 表示指针变量所指的成员 :
p->x=114514;
(*p).x=114514;
(*p)实质上是括起来,表示后面的东西是指针,“.“实质上是表示这是个结构体的成员,x则是结构体成员。
实际上是一样的,当然第一种更形象,更好用。
如果不希望传入函数的结构体的值被改变,可以加上const来让保证值不会随便更改。但如果这样的话,在传入的时候也需要标注清楚是const类型的结构体。
传入结构体的时候,需要标注数据类型的完整样式,比如:
Void(struct student qwq1);
这样才能传入一个结构体,但是这样只是拷贝了过去,只能实现参数的传递,不能随便调取。
以下是来自网页: https://blog.csdn.net/weixin_44442777/article/details/108396487
的代码,简单介绍了结构体传入函数的使用办法。
#include<stdio.h>
struct person
{
char name[10]; //成员姓名
char sex; //成员性别
double salary; //平日工资
double extra_gains; //外快收入
};
double sum(struct person *who) //将指针作为参数
{
who->extra_gains += who->salary;
return( who->extra_gains);
}
int main()
{
struct person Zhangsan =
{
“张三”,
‘m’,
20000, //张三日常划水的工资收入
10000000, //法外狂徒的外快收入
};
printf(“张三一个月的收入有%.2f元\n”, sum(&Zhangsan)); //将地址传入函数当中
printf(“此时Zhangsan的extra成员的值为: %.2f\n”, Zhangsan.extra_gains);
return 0;
}
应该写作这样:
函数应该标注清楚自己接受的是一个 名叫xxx(xxx)的结构体(struct)中的一个地址(*a),指向了一个变量a
那么写出来就是这样的东西:
Void hanshu(struct xxx *a);