C语言:结构体(基础全介绍)

本文介绍了C语言中的结构体,包括结构体的声明、成员类型、句点和箭头运算符的使用,以及结构体在函数参数中的传递方式。强调了使用指针和->运算符访问结构体成员的效率,并通过示例展示了结构体传参的两种方式——值传递和地址传递,推荐使用地址传递以节省内存。同时推荐了《明解C语言》作为学习资源。
摘要由CSDN通过智能技术生成

结构体比较复杂!知识相对来说比较多。作者也是对着日本作家柴田望洋的《明解C语言》反复学习才总结出这篇文章的。话不多说快来学习吧!

目录

1.结构体的声明

2.结构体成员的类型

3  . 运算符

4 -> 运算符

5.结构体传参


什么是结构体?简单来说,结构体就是聚合了一系列数据的数据结构。这些数据可以是不同类型的变量。

1.结构体的声明

 

 这就是结构体的声明。一但声明了结构体,就能在程序中自由的使用“struct 结构名”的结构体类型。

同时我们还可以创建结构体变量:

 这里的s1,s2,s3是相同的意思,只是s1,s2表示的是全局变量,而s3表示的是局部变量。

2.结构体成员的类型

我们用struct student来表示结构体类型中的名字、身高、奖学金。

在大括号里面的结构体成员就是被初始化的对象,他们之间用逗号进行分割。(未被初始化的元素被初始化成0) 

3  . 运算符

zhangsan.height        对象名.成员名

其中,  .  被称为句点运算符,用来表示结构体对象的成员。

4 -> 运算符

在指针变量前加上指针运算符*,就表示该指针指向的对象实体。

在结构体中,可以通过这种形式表示身高  :

(*student).height 

 通过*student可以表示其指向对象的身高成员。但是,这样子的写法既麻烦又容易出错,素以简介著称的C语言可不会有此疏漏。于是,->出现了。

student->height   表示  指向结构体的指针->成员名

 故对于指针指向的结构体成员,推荐使用 ->运算符将其简写。

5.结构体传参

既然都说到了->运算符,那么结构体传参也是必须要介绍的了。

首要问题就是:

结构体传参,传值还是传址?

作者在上一篇文章函数栈帧的创建里面详细介绍了相关内容,C语言:那些不为人所知的函数栈帧的创建和销毁(底层知识)_m0_62319039的博客-CSDN博客https://blog.csdn.net/m0_62319039/article/details/121729334?spm=1001.2014.3001.5501

我们首选函数传址!因为函数如果传值的话,会重新开辟一份内存空间,这对于内存的占用是巨大的。但若是传址调用,只需要把原空间的的地址传过去,这是不是非常环保呢?

struct S {
 int data[1000];
 int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s) {
 printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps) {
 printf("%d\n", ps->num);
}
int main()
{
 print1(s);  //传结构体
 print2(&s); //传地址
 return 0; 
}

(原代码摘录自 原来45 的博客,是一位非常厉害的大佬,有兴趣的小伙伴可以去看看)

(结构体)C语言从入门到入土(入门篇)_原来45的博客-CSDN博客https://blog.csdn.net/weixin_62700590/article/details/121415237至此结构体的内容就简单介绍完了,最后强推日本作家柴田望洋的《明解C语言》这套书,里面知识讲的非常明晰!

咱们下期再见!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值