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

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

目录

1.结构体的声明

2.结构体成员的类型

3  . 运算符

4 -> 运算符

5.结构体传参


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

1.结构体的声明

 C语言:结构体(基础全介绍)_第1张图片

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

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

C语言:结构体(基础全介绍)_第2张图片

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

2.结构体成员的类型

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

C语言:结构体(基础全介绍)_第3张图片

在大括号里面的结构体成员就是被初始化的对象,他们之间用逗号进行分割。(未被初始化的元素被初始化成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语言》这套书,里面知识讲的非常明晰!

咱们下期再见!

你可能感兴趣的:(笔记,c语言,开发语言)