完全自学C(干货) —— 结构体初识

机械转行java自学经历,零基础学java,血泪总结的干货 机械转行java自学经历,零基础学java,血泪总结的干货 据说,再恩爱的夫妻,一生中都有100次想离婚的念头和50次想掐死对方的冲动。 求职路上亦是如此,打开这篇文章,相信你也有转行的想法。和身边的朋友聊过,入职后的他们,或多或少对现在的职位都有些不满,都有过转行的冲动。 可他们只是想,而我真的这样做了。 下面就介绍下我转行的血泪史。 我为什么要转行 高中复读了一年,考了个双非院校的机械。当时... 阅读详情

目录

一,结构体的声明

二,结构体变量的定义及初始化

三,结构体成员访问

四,结构体传参


  • 是一些值的集合,这些值被称为成员变量;
  • 每个成员的变量可以是不同类型,数组只可存储同类型数据;
  • 可创建复杂对象,是一种自定义的数据类型;

一,结构体的声明

结构体关键字,结构体标签(可匿名省略),结构体成员;

//struct结构体关键字,Book结构体标签
//struct Book结构体类型
struct Book
{
    //结构体成员
	char name[20];
	float price;
	int num;
}; //封号不可丢

成员类型

  • 可以是字符型,整型,浮点型等常规类型;
  • 也可是数组,指针;
  • 甚至其他结构体;
struct Stu
{
	char name[20];
	int age;
	int arr[10];
	int* p;
	struct Book books;
};

不完全声明

  • 以上均为完全声明;
  • 不完全声明(匿名声明)即声明时省略标签;
  • 此时只有声明时才能定义、初始化变量;
//不完全声明(匿名声明)
struct 
{
	char name[20];
	int age;
	int arr[10];
	int* p;
	struct Book books;
}s = { "zhangsan",20,{0},NULL, {"C语言",99.5,10} }; 
//只可声明时才能定义、初始化变量

二,结构体变量的定义及初始化

结构体变量的定义

  • 声明时就定义变量;
  • 声明后才定义变量(不可为匿名声明);
struct Stu
{
	char name[20];
	int age;
	int arr[10];
	int* p;
	struct Book book;
}s1, s2; //声明时定义变量;

int main()
{
	struct Stu s; //声明后定义变量;
	return 0;
}

typedef重定义结构体类型

  • 通过重定义类型可简化;
typedef struct Stu
{
	char name[20];
	int age;
	int arr[10];
	int* p;
	struct Book book;
}stu;

int main()
{
	stu s ; 
	return 0;
}

结构体初始化

  • 即定义的同时赋初值;
  • 可嵌套初始化;
int main()
{
	struct Stu s = { "zhangsan",20,{0},NULL, {"C语言",99.5,10} }; 
	//初始化,book也初始化了(为嵌套初始化)
	return 0;
}
struct S
{
	char name[20];
	int age;
}s1;

int main()
{
	//两结构体可直接传值
	struct S s1 = { "zhangsan",10 };
	struct S s2 = { "lisi",20 };
	s1 = s2; 
	printf("%s %d", s1.name, s1.age);
	return 0;
}
//结果:lisi 20

//注意:
//数组不可通过数组名,直接传值(数组名表示首元素地址了);
//枚举可以通过变量名,直接传值;
//联合体可以通过变量名,直接传值;

三,结构体成员访问

两种方式

  • .  ,结构体变量.结构体成员
  • ->,结构体指针->结构体成员
int main()
{
	struct Stu s = { "zhangsan",20,{0},NULL, {"C语言",99.5,10} }; 
	struct Stu* ps = &s;
	printf("%s %d %s\n", s.name, s.age, s.book.name); //结果:zhangsan 20 C语言
	printf("%s %d %s\n", ps->name, ps->age, ps->book.name); //结果:zhangsan 20 C语言
	return 0;
}

四,结构体传参

结构体传参

  • 直接传结构体的值,即传值;
  • 传结构体的地址,即传址(函数传参时,建议传址);

函数传参时,参数需压栈;如结构体过大,传值会参数压栈系统开销过大,导致性能下降;详情请见《函数栈帧的创建和销毁》;

struct Book
{
	char name[20];
	float price;
	int num;
};

void print1(struct Book book) //传参-传值
{
	printf("%s\n", book.name);
}

void print2(struct Book* pbook) //传参-传址
{
	printf("%s\n", pbook->name);
}

int main()
{
	struct Book book = { "C语言", 99.5, 10 };
	struct Book* pbook = &book;
	print1(book); //结果:C语言
	print2(pbook); //结果:C语言
	return 0;
}

附:参数压栈

  • 栈,是一种数据结构,遵循“先进后出,后进先出”的原则;
  • 函数调用时会在内存的栈区,开辟一块空间(内存可分为栈区、堆区、静态区);
int Add(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}

int main()
{
	int a = 2;
	int b = 4;
	int sum = 0;
	sum = Add(a, b);
	return 0;
}

没基础的大学生如何自学c语言 ? 史上最强C语言学习大全,多亏我足够无耻,才从公司六位C语言程序员口中问出方法来。 没错。 这篇文章总结于我们公司六位使用C语言作为开发语言的程序员前辈,方方面面近三千五百字。 C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐。真的太多人学也有太多要学的东西了,以至于后台总有人问C语言该怎么学,甚至还有具体问编程问题的。 乘此机会,整理C语言程序员的从入门到精通之路,分享一下这么多年来我们公司C语言程序员的学习心得。 为了这篇文章,我是费尽口舌,软磨硬泡收集到信息之后,又花 阅读详情

相关推荐

基于C#的跨平台上位机开发:一次编写,多平台运行

摘要: 本文探讨了如何利用C#进行跨平台上位机开发,以适配Windows、Linux、macOS等多平台需求。通过分析传统单平台开发的局限性(如API差异、硬件接口兼容性),提出基于.NET 5/6/7的解决方案,重点推荐Avalonia(类WPF的跨平台UI框架)和GtkSharp(基于GTK+)实现图形界面。同时,针对硬件通信需求,介绍了System.IO.Ports串口通信和LibUsbDotNet的跨平台支持,并强调多平台调试(VS Code、Docker)的重要性,最终实现一次编码、多端部署的高效

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1408

c语言printf结构体,小白来学C语言之结构体

定义和使用结构体变量自己建立结构体类型用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体声明一个结构体类型的一般形式为:struct 结构体名{ 成员表列 };**************************struct Student{int num;char name[20];char sex;int age;float score;char addr[30];}上面这个...

weixin_34363294的博客 2631

STM32F103C8T6+HX711实战:从零打造智能体重秤(附OLED显示与语音播报)

本文详细介绍了基于STM32F103C8T6微控制器和HX711称重模块,从零构建智能体重秤的完整实战教程。内容涵盖硬件选型、系统架构、驱动编写、数据滤波校准算法,并实现了OLED显示与语音播报功能。该项目是嵌入式学习的综合性实践,尤其适合作为毕业设计课题,帮助开发者掌握传感器应用、数据处理及人机交互等核心技能。

weixin_28285943的博客 517

C语言结构体

C语言结构体,结构体创建,对齐规则等等..

undersecretary的博客 2419

运算放大器基础1——用作比较器

运算放大器,运放,在电路设计中非常常见。在图2中,当前状态下,开关切换到0V,“正相输入”和“负相输入”都是接地,运放两个输入端电压相同。最后,调节可变电阻,使其两端电压大于3.37V,比如3.43V,作为运放正相输入,由于电压大于反相输入,LED点亮(运放输出为5V)。其次,调节可变电阻,使其两端电压小于3.37V,比如2.09V,作为运放正相输入,由于电压小于反相输入,LED不点亮。好,现在我们将0.1V电源换个方向,这样实际“正相输入”的是-0.1V,比“负相输入”的电压要低,看看输出是什么?

m0_60069998的博客 6123

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 267

高效率、灵活打印结构体串(C语言版)

C语言中很多时候把结构体当做字符串使用。 例如一个简单的报文协议: 命令类型 4字节 //通信测试报文  “1001”         交易系统ID   2字节         版本号     10字节 MAC 8字节 数据 20字节 那么我们根据不同的报文定义结构体: typedef struct   { char    TRXTYPE [TYPE_LEN];

静心修行 2万+

古月学院《如何在Gazebo中实现阿克曼转向车的仿真》课程资料在ROS Noetic版本中运行时的常见错误及解决方法

   最近想在Gazebo中开发一些仿真内容,于是购买了古月学院的《如何在Gazebo中实现阿克曼转向车的仿真》课程,但是由于ROS 版本的更新,拿到手的课程资料不能直接在ROS Noetic版本中运行,经过我这几天的探索,对遇到的错误及解决方法进行了整理,方便后面购买课程的小伙伴更快的成功运行程序    在文章正式开始之前,先放一下我之前为了寻找该资料报错的原因,而写的两篇与该课程相关的文章链接,感兴趣的可以自行阅读    以阿克曼转向车为例对URDF和XACRO文件进行解读(点击可跳转)    将x

慕羽★的博客 5974

完全自学C(干货) —— C简介

C介绍

NapoleonCoder的博客 2343

基于matlab不变矩的数字验证码识别系统

随着互联网技术的快速发展和应用,网络给人们提供了丰富的资源和极大的便利,但随之而来的是互联网系统的安全性问题,而验证码正是加强 Web 系统安全性的产物。全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA)也是验证码的一个应用程序,可以区分用户是人类还是计算机智能单击对象。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 917

2023华为od机试【最小循环子数组】C++

2023华为od机试【最小循环子数组】C++ 给定一个由若干整数组成的数组nums,请检查数组是否是由某个子数组重复循环拼接而成,请输出这个最小的子数组。

MISAYAONE的博客 2185

手把手教你如何自学计算机,绝对的干货满满!!!

a. 自我介绍; 在下姓赵,编程萌新,现大一,非计算机专业新生,第一次接触并学习C语言是大一上学期,学习一段时间后尝试写 b. 编程目标; c. 如何学习编程; d. 在学习编程上每周花费多少时间; e. 我最想进入的一家IT公司; ...

qq_56847032的博客 3万+

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异

Soly_kun的博客 733

30个珍藏的程序员超实用自学网站,干货!

有朋友问我平时都是在哪里自学的呢?大学四年以来我收藏了各种学习网站今天一次性分享给大家,一起学习! 一、视频类自学网站 1.哔哩哔哩 自学观看各种教程视频,比较推荐B站,各个领域极其全面。 网址:https://www.bilibili.com/ 2.慕课网 这个网站也是比较常用的,有各种实用的教程,如果你想快速入门一种语言的话,可以到这看看。 网址:https://www.imooc.com...

zag666的博客 3万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

完全自学C(干货) —— 自定义类型

结构体是一些值的集合,称为成员变量;内存对齐;段位;

NapoleonCoder的博客 389

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

完全自学C(干货) —— 指针初识

指针即内存地址(编号);

NapoleonCoder的博客 356

完全自学C(干货) —— 数据类型初识

数据类型,定义了数据的类别,用来如何解释数据,以及是怎样开辟内存,访问内存的;

NapoleonCoder的博客 388

完全自学C(干货) —— 编译与链接

编译与链接,预处理指令;

NapoleonCoder的博客 1204

完全自学C(干货) —— 函数

即子程序,是大型程序中某部分代码,由一个或多个语句块组成,通常被集成为软件库;

NapoleonCoder的博客 380

完全自学C(干货) —— 数组

一组相同类型元素的集合,可存储一系列相同类型的数据;

NapoleonCoder的博客 1154

完全自学C(干货) —— 文件

文件名/文件指针/文件的打开和关闭/文件的顺序读写/文件的随机读写/文本文件和二进制文件/文件的结束判定/文件缓冲区;

NapoleonCoder的博客 543

完全自学C(干货) —— 常量、变量

常量:不能改变的量,在程序的运行过程中,不能变化的量; 变量:能被改变的量,在程序的运行过程中,可能会改变或者被赋值的量;

NapoleonCoder的博客 366

【方法分享】准大学生如何自学C语言?

准大学生如何自学C语言 文章目录准大学生如何自学C语言一、找寻一个优质教学视频二、使用优质编译器三、安排一个电子笔记需不需要一个ipad来辅助学习?结语 虽说现在已经接近我们最长的且无忧无虑的暑假的尾声 但我估摸着很多小伙伴还是和我一样整天摸鱼,不知不觉就浪费了一天 (其实只有我在摸鱼对吗,流下了不争气的泪水) 不扯这些没用的,进入今天的正题 本篇博客和大家分享一下我是如何自学C语言的,以及如何做学习笔记 学习方法各不相同,请以自身情况为准 一、找寻一个优质教学视频 好的教学资源永远是我们学习的第一步 在这

慕雪华年的博客 3178

0基础C保姆自学 第二节——初步认识C语言的全部知识框架

在看本章节前,请确保已经掌握了第一节的内容呦。不懂的欢迎在评论区留言~~~~ 本节定位:初步了解认识一下C中的知识,所有的知识都是点到为止。目的是在接下来章节的介绍中笔者的举例读者可以更好的接受。比如在函数的介绍中我们会用到指针。 所有的知识点我们会在接下来的章节一一详细介绍,读者在阅读本章的时候,只需要知道有这么个东西,并且能够理解笔者所说的含义即可。 本节我们将沿着上一节介绍: 本节内容有: 数据类型; 常量和变量; 字符串; 转义字符; 代码注释; 数组; 函数; 选择语句;

jxwd的博客 1万+
上一篇: 完全自学C(干货) —— 指针初识
下一篇: 完全自学C(干货) —— 函数
挨代码
博客等级 码龄5年 1696粉丝 384原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值