【C生万物】 结构体篇

这篇具有很好参考价值的文章主要介绍了【C生万物】 结构体篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 欢迎来到 Claffic 的博客 💞💞💞                               👉 专栏:《C生万物 | 先来学C》👈 

【C生万物】 结构体篇

前言:

这期继续C语言的学习,进行结构体的讲解,值得注意的是,这期的结构体只是简单的介绍和使用,后期会再次详细讲解。

【C生万物】 结构体篇 


 

目录

Part1:结构体的声明

1.概念

2.声明和定义

3.变量初始化

Part2:结构体成员访问

1.结构体变量访问成员

2.结构体指针访问成员

Part3:结构体传参


Part1:结构体的声明

1.概念

结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。 

2.声明和定义

一图就懂:

【C生万物】 结构体篇

如:

【C生万物】 结构体篇

声明一个学生结构体,其中包括学生的姓名 name ,年龄 age ,性别 sex

同时定义了两个该类型的结构体变量:s1 , s2.

当然先声明后定义也可以:

【C生万物】 结构体篇

为了方便,还可以这样玩:

【C生万物】 结构体篇

以上三种方式没有本质区别,都是声明并定义了全局结构体变量 s1 , s2.

3.变量初始化

初始化就是给结构体成员附一些初始值

继学生结构体:

【C生万物】 结构体篇

初始化:

Stu s1 = { "claffic",18,"boy" };

注意:初始化内容一定按顺序与类型匹配

那结构体里有结构体怎么办?

嵌套初始化即可:

typedef struct Point
{
	int x;
	int y;
};

struct Node
{
	int data;
	struct Point p;
	struct Node* next;
}n1 = { 10,{1,3},NULL };
struct Node n2 = { 20,{2,4},NULL };

Part2:结构体成员访问

1.结构体变量访问成员

结构体变量成员是通过点操作符 (.) 来访问的,点操作符接受两个操作数

【C生万物】 结构体篇

struct student s;
strcpy(s.name, "claffic"); // 字符串不可直接用 = 赋值
strcpy(s.sex, "boy");

2.结构体指针访问成员

有时我们得到的不是结构体变量,而是结构体指针,也可以访问结构体变量。

struct student
{
	char name[20];
	int age;
	char sex[5];
};

void Print(struct student* ps) // 传递指针
{
    // 解引用访问
	printf("name = %s  age = %d  sex = %s", (*ps).name, (*ps).age, (*ps).sex);
    // 指针访问 用 -> 操作符
	printf("name = %s  age = %d  sex = %s", ps->name, ps->age, ps->sex);
}

int main()
{
	struct student s = { "claffic",18,"boy" };
	Print(&s); // 传递地址,取地址

	return 0;
}

运行结果:

【C生万物】 结构体篇

Part3:结构体传参

传参与成员的访问大差不差

也是有两种类型:结构体变量传参 和 结构体指针传参

我们接下来对比一下两种方法:

struct S
{
	int data[1000];
	int num;
};
struct S s = { {1,2,3,4}, 500 };
//结构体传参
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;
}

 以上方式展示了两种传参的方式,

试想一下, Print1 Print2 哪个好?

首选 Print2 

原因:

函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
而指针的大小是固定不变的,开销稳定。
结构体传参的时候,要传结构体的地址


总结: 

这就是结构体的初级知识介绍了,整体上不算复杂,会定义和使用结构体即可。

码文不易 

如果你觉得这篇文章还不错并且对你有帮助,不妨支持一波哦  💗💗💗文章来源地址https://www.toymoban.com/news/detail-434087.html

到了这里,关于【C生万物】 结构体篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 万物流动 万物永驻 ——C++ Core Guidelines的流动哲学

    众所周知,C++ 是一门自由的语言,语言的设计哲学之一就是赋予程序员极大的自由度和灵活性,因此,使用C++ 完成一个任务时,不同的程序员往往会有不同的实现方法,这真正阐释了什么叫条条大路通罗马。不过,这种自由和灵活的代价就是语言复杂度的提升,学习曲线也

    2024年02月10日
    浏览(34)
  • C生万物呀

    1、快捷键 快捷键 描述 ctrl+滚轮 字体变大小 ctrl+K+C 注释 ctrl+K+U 取消注释 home 行首 end 行末 2、C语言标准库函数 3、字符字符串 双引号:字符串 单引号:字符 4、占位符 符号 技能 n 换行 %d 整数 %c 字符 %f 浮点数 %c 字符 5、C语言的(保留字) 6、数据类型 7、ASCII编码

    2024年01月19日
    浏览(30)
  • 万物的算法日记|第一天

    笔者自述: 一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结,因为后半年也该找实习了,所以每日的算法题要进行恶

    2024年02月13日
    浏览(40)
  • 万物的算法日记|第三天

    笔者自述: 一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结,因为后半年也该找实习了,所以每日的算法题要进行恶

    2024年02月09日
    浏览(46)
  • SAM(2023)-分割万物

    论文: 《Segment Anything》 github: https://github.com/facebookresearch/segment-anything 作者构建到目前为止最大分割数据集,包括1billion mask及11M image,该模型训练过程是可提示的,所有可以进行zero-shot任务,甚至超越之前全监督结果。 SAM结构如图4,包括: 图像编码器、灵活的prompt编码器、

    2023年04月27日
    浏览(97)
  • 物联网到底如何实现万物互联?

    前言:作为计算机相关专业的你,绝对听说过物联网这个词,它的解释相比你也听过,叫万物互联,也就是所谓的IOT,但是说实话它到底如何实现的万物互联的你可能还真不知道。不是每个物体都有一个网络接口或者实体接口,等着你把网络连进来,今天你看完这篇文章哪怕

    2024年02月08日
    浏览(43)
  • 【C生万物】 指针篇 (初级)

     欢迎来到 Claffic 的博客  💞💞💞                               👉  专栏: 《C生万物 | 先来学C》👈 前言: 面对C语言,很多童鞋都会高呼:指针难,指针难,对于我来说,指针是解决问题的一大杀器,是C/C++的 灵魂 ,先不考虑难不难的问题,上了车再说。   目录

    2024年02月02日
    浏览(44)
  • flutter笔记-万物皆是widget

    这篇文章后就不见写了,学flutter主要是为了更好的使用 flutter-webrtc,所以到这里基本就了解了大部分的知识,后续边用边查; 在flutter中所有的view都叫widget,类似文本组件Text也是集成自widget; 创建第一个项目如下: runApp传入的参数就是一个Widget;所以我们可以传入Text,示例

    2024年04月28日
    浏览(45)
  • 万物互联之~网络编程深入篇

      上节回顾:5种IO模型 | IO多路复用 and 万物互联之~网络编程加强篇 官方文档:https://docs.python.org/3/library/internet.html 总结篇: 【总结篇】一文搞定网络编程 画一张图来通俗化讲讲TCP三次握手: 用代码来说,大概过程就是: 画图通俗讲下TCP四次挥手: 用代码来说,大概过

    2024年02月08日
    浏览(44)
  • RSSHub让万物皆可RSS

    要是安排在周三和周日的话,一周两次就够,但是现在有点尴尬了,今天再不做明天就超时了 😂 前段时间发了一篇 FreshRSS,有网友希望配合着讲讲 RSSHub ,今天我们就一起来研究一下。 什么是 RSS ? RSS(Really Simple Syndication) 是一种描述和同步网站内容的格式,是使用最广泛的

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包