C语言之结构体

C 语言通过结构体成员获得结构体指针 通过结构体成员拿到结构体的指针,是C语言实现继承多态的基础。面向对象C编程可以参看这里OOC 面向对象C语言编程实践。这里详细介绍这个核心的操作方法。 /** * Get struct pointer from member pointer */ #define StructFrom2(memberPtr, structType) \ ((structType*) ((char*) m 阅读详情

结构体定义

由若干不同数据类型组成的新的复合数据类型.(自定义类型).封装.
格式: struct 结构体名{结构体成员部分};
定义结构体变量:
struct 结构体名 变量名;
struct 结构体名{结构体区域}变量名;
初始化方式
第一种:struct Man danny = {666,1};
第二种:struct Man{
int id;
int sex;
}xiaqi = {999,0};
第三种: 赋值方式 直接通过点去访问结构体中的成员变量.
xiaqi.id = 999;
xiaqi.sex = 1;
结构体重命名:
typedef struct woman{
char name;
int id;
}xxx;

结构体指针

一个指针指向于结构体,定义如下
struct woman* pXiaqi = (struct woman*)malloc(sizeof(Wm));
使用: 用指针通过->的方式访问成员变量,例如:
pXiaqi->id = 123;
结构体嵌套:

  1. 在结构体中定义结构体例如;
     struct wo{
    	            int id;
    	            char name;
    	            int sex;
    	            struct baby	
    	            	{
    		                int id;
    		              	char name;
    	            	 }zichen;
    	             }
  1. 在结构体中使用结构体变量
struct WM
{
	int id;
	char name;
}TF_wm;
struct wo
{
	int x;
	TF_wm guangguang;  //TF_wm就是结构体WM的别名,guangguang是名字
};

代码示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct woman                   //结构体woman,前面加一个typedef 就是要去别名。后面的Wm就是别名
	char name[20];
	int id;
}Wm,*Pwm;                               //结构体woman的别名

typedef struct wo
{
	int id;
	char name;
	int sex;
	struct baby
	{
		int id;
		char name;
	}zichen;
	Wm guanguang;
}wo;

//typedef struct woman*         Pwm;

int main()
{
	
	//动态分配一个结构体内存空间大小 pxiaqi指向这块内存.
	struct woman* pXiaqi = (struct woman*)malloc(sizeof(Wm));
	printf("pxiaqi = %d\n", sizeof(pXiaqi));
	pXiaqi->id = 123;
	strcpy(pXiaqi->name ,"xiaqi");
	printf("名字%s,id = %d\n", pXiaqi->name, pXiaqi->id);
	Pwm pxq;

	wo tutu;
	tutu.id = 233;                                             //结构体的元素赋值
	tutu.zichen.id = 333;
	tutu.sex = 1;
	tutu.zichen.name = 'z';

	tutu.guanguang.id = 123;                       //结构体的元素赋值
	strcpy(tutu.guanguang.name , "gg");


	return 0;
}

结构体数组

数组中元素时结构体.每个元素都是结构体组成.
访问结构体: 每个元素都是结构体,把每个元素当做结构体变量使用
arr[0].id = 123;
位段:按照位的方式存储结构体中某一个成员变量的某几位
格式: struct 结构体名{类型 变量名:长度};
案例:

typedef struct person
{
	unsigned char sex:1;  // sex = 3;   位段
	char name;
	int id;	
}per,*Pper;

对齐和补齐:
1. 小的数据类型放最前面,按照从小到大定义变量
2. 相同数据类型放一起.
大端和小端:
小端:数值的高位字节放在内存的高地址上

代码示例

#include <stdio.h>

//位段
typedef struct person
{
	unsigned char sex:1;  // sex = 3; 
	char name;
	int id;
}per,*Pper;

struct test
{
	char x;
	int  y;
	char z; 
};

int main()
{
	per danny;
	per arr[10] = { { 1, '1', 1 }, { 0, 'a', 2 }, {0,'v',3} };
	arr[0].id = 123;
	arr[0].name = '1';
	arr[0].sex = 1;
	printf("arr[0].id = %d ,arrr[0].name = %c\n", arr[0].id, arr[0].name);
	printf("sizeof(arr) = %d\n", sizeof(arr));
	
	//第二个知识点
	per xq;                     //由于结构体per 中  sex使用了位段的形式unsigned char sex:1;,所以sex的值只能为0或者1
	xq.sex = 1;
	printf("xq.sex = %d\n", xq.sex);//sex的值为1的时候++,结果又会变成0
	xq.sex++;
	printf("xq.sex = %d\n", xq.sex);
	xq.sex++;
	printf("xq.sex = %d\n", xq.sex);

	struct test t;
	printf("sizeof(t) = %d", sizeof(t));

	int x = 0x12345678;
	
	return 0;
}
torchsparse安装 torchsparse安装以及安装失败原因分析和解决 阅读详情

相关推荐

芯片低功耗设计实战:CPF与UPF流程选择指南(附工具对比)

本文深入探讨了芯片低功耗设计实战中CPF与UPF流程的选择策略。文章从两者本质差异与演进脉络出发,结合Cadence与Synopsys工具链的深度支持实况,为工程师提供了基于项目场景的决策框架。重点分析了在混合工具链环境下如何实施流程与验证,并强调了利用Spyglass等工具确保功耗意图无损传递的关键技巧,旨在帮助团队做出明智的流程抉择,提升设计效率与可靠性。

weixin_29197051的博客 405

【C语言】自定义类型--结构体

👍【前言】👍在日常写代码的过程中,结构体可谓是见怪不怪,那么你是否真的理解结构体的内存对齐,结构体自引用,以及结构体的一些特殊声明,接下来就由博主带你们一起在知识的海洋中遨游吧!✈️

qq_63179783的博客 2903

用Cloudflare Worker搭建你的私人Gemini Pro API

文章介绍如何通过开源项目gemini-cli-openai将谷歌Gemini模型转换为兼容OpenAI API的服务,解决Gemini CLI的三大使用障碍:网络访问、命令行操作和生态整合问题。部署流程主要包括获取Google OAuth2凭证、配置Cloudflare Worker项目并设置KV存储,最终可在CherryStudio等图形客户端中调用Gemini。该方法利用Cloudflare全球网络实现加速访问,同时保持认证信息安全可控。

Hsiao的二进制生活 1683

结构体的总结

一、结构体的定义 二、对结构体的重命名 三、结构体和指针的结合 四、结构体和数组的结合 五、结构体大小 六、结构体嵌套 七、动态内存与结构体 八、总结(用结构体对学生成绩实行升序排序)...

qq_55703811的博客 1986

车规级非易失存储选型指南:从AEC-Q100到ISO 26262的可靠性设计

非易失存储器是电子系统中负责长期保存关键数据与代码的核心组件,其可靠性直接决定了系统的长期稳定运行能力。在汽车电子领域,这一要求被提升到了极致,必须满足严苛的车规级标准。从原理上看,存储器的数据保持能力、擦写寿命等关键参数在高温、振动等恶劣环境下会急剧衰减,因此需要专门的设计与验证。其技术价值在于保障车辆全生命周期的功能安全与数据完整性,避免因存储失效导致的安全隐患或频繁维护。应用场景涵盖从发动机控制单元、自动驾驶域控制器到智能座舱的各类电子控制单元。本文聚焦于车规级非易失存储的选型,深入解析AEC-Q10

weixin_30938149的博客 458

基于 Go 的微信滑块验证码自动化:协议还原与图像算法深度解析

本文从协议层、算法层和工程优化三个维度,系统拆解了基于Go的微信滑块验证码自动化方案。在协议层,通过手写protobuf编码器和RSA加密复现了微信UUID生成机制;在算法层,采用图像匹配技术实现滑块缺口定位;在工程层面,构建了包含HTTP状态机和随机化设备指纹的完整验证流程。文章重点阐述了技术实现的形式化建模、算法选择依据和复杂度分析,为工程师和算法研究者提供了可验证的技术方案。核心代码结构包括UUID生成、滑块状态机和图像匹配算法等模块,通过分层设计实现了高效可靠的验证码自动化破解。

weixin_65409651的博客 1293

c语言----自定义类型---结构体(声明、重命名、对齐规则、传参、位段...详解)

快来掌握结构体声明、重命名、对齐规则等知识点吧

2302_81090306的博客 3295

华为交换机与思科/华三设备LACP对接实战:手把手教你配置链路聚合

本文详细解析了华为交换机与思科、华三设备间的LACP链路聚合配置实战,涵盖核心原理、配置步骤及排错技巧。通过对比不同厂商的实现差异,提供可落地的跨厂商对接方案,助力企业网络工程师高效部署高可靠性链路聚合。

weixin_30836759的博客 423

关于C语言自定义类型的总结

结构体 1. 结构体的声明 结构体是一些值得集合,这些值成为成员变量.结构的每个成员可以是不同类型的变量 例如描述一个学生: struct Stu { char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 };//分号不能丢 2. 特殊的声明 在声明结构的时候,可以不完全的声...

a_hang_szz的博客 609

量子密钥分发系统设计与实现(一):系统基本架构讨论

本文主要对量子密钥分发系统中的基础架构和基于系统的量子密钥协商过程进行了初步讨论,为后期系列文章进行铺垫。

量子领域相关话题 3896

python批量调用大模型API:多线程和异步协程

本文介绍了利用多线程技术批量调用大模型API的实现方法。核心是通过并发请求提高处理效率,主要采用线程池管理并发数量、结果聚合等技术。文章提供了一个完整的Python实现示例,包含APIBatchCaller类及其single_api_call和batch_call方法,详细解析了并发控制、错误处理等关键点,并给出了使用注意事项,包括并发数设置、重试策略和超时处理等。该方案特别适合IO密集型任务,能显著提升批量API调用的效率。

Cachel Wood的博客 760

C语言:自定义类型 - 结构体 & 联合体 & 枚举

讲解C语言的自定义类型,包括结构体,联合体,枚举

博客网站 https://async-area.com 1718

【异常】Cursor编辑器 “Taking longer than expected...“ 报错全链路排查与解决方案

该提示并非传统的程序崩溃或语法报错,本质是Cursor编辑器的超时预警机制——当核心任务(云端AI推理请求、本地项目索引等)的执行耗时超出系统预设阈值时,触发的用户告知类提示,核心诱因是任务执行全链路出现阻塞或性能瓶颈。以下方案按排查优先级从高到低排序,覆盖从快速急救到根因根治的全流程,可按步骤逐步验证解决。针对大仓库、多依赖项目的索引超时问题,核心是通过规则过滤无效文件,从根源降低索引负载。

奶爸的编程之路,也就一周冷个三天 3103

C语言——结构体

结构体在C编程或者说数据结构中有着举足轻重的地位,为了熟练地运用结构体,本文基本总结了结构体所有的知识点,包含结构体定义、初始化和引用、结构体传参、结构体指针,以及结构体内存对齐,还捎带介绍了位段的相关知识。

weixin_45389997的博客 8005

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C语言】结构体

struct — 结构体的关键字。 student —结构体的标签,可以随意的替换看你指向的对象是谁了。 structstudent ——叫做结构体类型。 大括号 { }里面的内容被称作是:成员变量, 注意大括号后面必须要有分号,可以加成员列表,分号前面内容,可以是全局的结构体变量(一般都不会去使用),在代码中我们要尽可能的去少的使用全局变量。 在函数中 mation —— 结构体类型的变量,当然这里我直接student mation;是可以的,因为我用了typedef关键字,当然这个是可 ......

"謓泽"正在路上朝着"攻城狮"方向"前进四"! 4239

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【C语言】——结构体

摘要,写什么好呢?

yusjushd的博客 1846

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C语言结构体详解

C语言结构体详解

qq_28576837的博客 1万+

c语言中结构体的用法

一、定义         由于一个数组中只能存放同一种类型的数据,很不方便,所以C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,也就是结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 二、用法 1、先定义结构体类型,再定义结构体变量。 struct student{ ...

qlexcel的专栏 1万+

C语言typedef结构体的理解

在C语言里,struct用于定义一个数据类型------结构体,typedef用于给数据类型取别名。 typedef struct Student{ int Age; int Id[10]; }Stu; 表示给结构体变量struct Student取了一个别名Stu。这样下次定义一个结构体变量就可以写成Stu stu1。如果不用typedef。 struct Student{ int Age; int Id[10]; }Stu; 此时说明已经定义了一个结构体变量Stu,如

weixin_45395062的博客 3512

【C语言】结构体详解

在计算机编程的世界中,数据的组织和存储是至关重要的。C语言作为一门强大而灵活的编程语言,提供了结构体(Structures)这一强大的工具,使得我们能够更加有效地组织和管理数据。结构体是C语言中一种用户自定义的数据类型,它允许我们将不同数据类型的元素组合在一起,形成一个更为复杂的数据结构。通过结构体,我们可以模拟现实世界中的实体,将相关的信息组织起来,使得代码更加清晰、可读性更强。在这篇博客中,我们将深入探讨C语言结构体的概念、用法以及它在程序设计中的实际应用。

m0_68002296的博客 2111

C语言之结构体的总结

目录 一、什么是结构 二、结构的定义 三、结构体变量的定义和初始化 四、结构的自引用 五、结构变量的使用 1.结构变量成员的引用 2.结构变量的整体赋值 3.结构变量作为函数参数 六、结构指针 七、结构数组 八、结构体内存对齐 1.计算结构体大小 2.为什么内存的对齐 九、修改默认对齐数 一、什么是结构 C语言c语言的内置类型:char,short,int,long,float,double;自定义类型:结构体,枚举,联合体 结构类型是一种允许程序员把一些数据分量聚合成一.

Poem_coder的博客 3427

C语言中什么是结构体,怎么定义结构体。

为什么要用结构体? 没有结构体之前,C语言中,数据的组织依靠:变量+数组。最初最简单的时候,只需要使用基本数据类型来定义单个变量,需要几个就定义几个,后来有时候需要很多意义相关的变量这时候数组出现了。数组解决了需要很多类型相同,意义相关的变量问题,但是数组是有限制的,数组的不足在于,一个数组只能存储很多个数据类型相同的变量。所以碰到需要封装几个类型不同变量的时候,数组就无能为力。这时候就...

初学者探索之路,认真当条汪 4055

c语言结构体名称是什么,C语言结构体

C语言结构体教程结构体(struct)是由一系列具有相同在结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。C语言结构体定义语法struct structName{fieldType1 filed1;fieldType2 filed2;fieldType3 filed3;};参数参数描述struct定义结构体使用的关键字。str...

weixin_28304023的博客 3859
上一篇: C语言函数详解
下一篇: 指针运用,回文判断
Limit_Fly
博客等级 码龄9年 31粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值