659 字
3 分钟
Loading
结构与函数
2023-10-30

没有直接的方式可以一次读入(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);

结构与函数
https://vilstia.pages.dev/posts/学习笔记/c/结构与函数/
作者
琴泠
发布于
2023-10-30
许可协议
CC BY-NC-SA 4.0