【C语言】结构体(详解)
创始人
2025-05-30 16:32:16

目录

  • 1. 结构体基本知识
      • 1.1 结构体声明
      • 1.2 结构体的自引用
      • 1.3 结构体变量的定义和初始化
  • 2. ** 结构体内存对齐
      • 2.1 结构体内存对齐规则

1. 结构体基本知识

1.1 结构体声明

(假如描述一个商品)

struct item
{char name[30];int price;float dicount;
};

 
声明时可以同时定义结构体变量,这里定义的变量是全局变量
item1 是一个类型为struct item的结构体变量

struct item
{char name[30];int price;float dicount;
}item1;  // item1 是一个类型为struct item的结构体变量

 
结构体的类型重命名
结构体类型一般比较长,通常声明的同时进行类型重命名(typedef)
这里的struct item类型被重定义为item类型
注意:重新命名的类型名位置与定义全局结构体变量相同

typedef struct item
{char name[30];int price;float dicount;
}item;

 

匿名结构体(须在声明同时定义结构体变量)

struct 
{char name[30];int price;float dicount;
};

 
 

1.2 结构体的自引用

下面是单链表中的结构体自引用,通过结构体指针进行自引用

typedef struct Node
{int data;struct Node* next;
}Node;

 
 

1.3 结构体变量的定义和初始化

根据结构体类型使用{ }定义
下面是结构体的嵌套定义

struct point
{int x;int y;
};typedef struct Node
{int data;struct point p;struct Node* next;
}Node;int main()
{Node n1 = { 2, {3, 4}, NULL };return 0;
}

2. ** 结构体内存对齐

2.1 结构体内存对齐规则

  • 第一个成员在相对结构体变量的 0 偏移量地址处
  • 其余各成员对齐到各自对其数的整数倍偏移量地址处
  • 某成员的对其数 = min{ 该成员字节数,默认对其数 },(默认对其数在VS环境下为8)
  • 结构体的总大小为各其成员最大对其数的整数倍
  • 嵌套了结构体时,嵌套的结构体对齐到其最大对其数的整数倍地址处,该结构体整体大小为所有对其数中(包含被嵌套结构体的对其数)最大对其数的整数倍

对齐的原因

  • 结构体对齐是拿空间换时间的做法,处理器访问未对齐内存时,需要作两次访问,而访问对齐内存只需一次访问
  • 数据结构,尤其是栈,应尽可能在自然边界上对齐

 

下面结构体的大小是16

struct test{short c;int b;char d;   int a;   };

分析
在这里插入图片描述
 

设计结构体时,为尽量节省空间,可将占空间小的成员尽量集中在一起
在这里插入图片描述
 

 
可以使用#pragma修改默认对其数
将默认对其数修改为2:

#pragma pack(2) //默认对其数修改为2

还原为默认对其数

#pragma pack()

 
offsetof可计算结构体中某成员相对于起始位置的偏移量
计算结构体类型struct test中成员d的偏移量

	printf("%d\n", (int)offsetof(struct test,d)); //8

在这里插入图片描述

相关内容

热门资讯

【面试题】有哪些良好的veri... 1.使用有意义的命名 命名应该清晰、简洁、易于理解和维护,避免使用缩写或不规范的命名方...
用友NC5X数据抽取 功能通过工具,对NC帐套中的特定公司和特定模块及年度进行抽取,形成独立的...
密度泛函理论-从波函数到电荷密... 1 在许多物理学和工程领域中,取得科学和技术进步关键在于能够从原子或者分子尺寸...
烫发要多久,烫头发要多久 极速... 烫发要多久目录烫发要多久烫头发要多久一般烫发需要花多长时间烫个头发大概需要多长时间烫发要多久 ...
代码br是什么意思 极速百科网... 代码br是什么意思目录代码br是什么意思代码br是什么意思
诺科壁挂炉使用方法是什么,诺科... 诺科壁挂炉使用方法是什么目录诺科壁挂炉使用方法是什么诺科壁挂炉使用方法壁挂炉使用方法是什么?诺科壁挂...
前不见古人的意思,前不见古人什... 前不见古人的意思目录前不见古人的意思前不见古人什么意思?登幽州台歌翻译前不见古人的意思 “前不...
Android---WMS核心... 目录 Activity 与 Window 相关概念 WindowManagerService  Ac...
【JavaWeb】Cookie... Cookie 257.Cookie-什么是Cookie 1、Cookie 翻译过来是饼干的意思。 2...
功率放大器的阻抗匹配原理   设计电路的时候,经常会有很多人对于阻抗有疑问,那么什么是阻抗...
苹果xs和xr的区别,ipho... 苹果xs和xr的区别目录苹果xs和xr的区别iphonexr和xs区别苹果xr怎么更新苹果xs和xr...
建设银行个人网上银行怎么登录,... 建设银行个人网上银行怎么登录目录建设银行个人网上银行怎么登录中国建设银行个人网上银行怎么登陆建设银行...
飞机上可以带几条烟,乘飞机可以... 飞机上可以带几条烟目录飞机上可以带几条烟乘飞机可以带多少条烟坐飞机可以带几条烟坐飞机可以带几条烟?飞...
4厘的利息怎么算,银行说四厘的... 4厘的利息怎么算目录4厘的利息怎么算银行说四厘的利息,怎么算?4厘的利息怎么算4厘的利息怎么算 ...
pkg打包node项目到lin... 首先看一下pkg的一些基本操作 pkg打包node项目为exe_node静态项目 导出exe_疆~的...
实验二 Wireshark 报... 实验 Wireshark 报文捕捉分析实验 小组成员:杨某 王某 郭某 徐某 一、实验目的 掌握 W...
RC4加密——python实现... 1.RC4算法简介 ​ RC4算法由Ron rivest于1987年设计出的一种对称加密算法...
跑跑卡丁车怎么反向集气,跑跑卡... 跑跑卡丁车怎么反向集气目录跑跑卡丁车怎么反向集气跑跑卡丁车反向集气教程现代跑跑卡丁车反向补气怎么玩跑...
不做老好人给你们一个最真实的大... 今天给各位分享不做老好人给你们一个最真实的大众T-ROC测评的知识,其中也会对进行解释,如果能碰巧解...
用声音控制跳跃的游戏,别停下八... 用声音控制跳跃的游戏目录用声音控制跳跃的游戏别停下八分音符酱声控技巧分享一个游戏要用尖叫声玩音符游戏...
我国的最高国家权力机关是哪个,... 我国的最高国家权力机关是哪个目录我国的最高国家权力机关是哪个我国的最高国家权力机关是()。我国最高的...
项目管理(PMP)精选题精讲 请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟࿰...
《伤寒论》——辨太阳病脉证并治... 辨太阳病脉证并治(下)1.问曰:病有结胸①,...
Chat GPT介绍 一、Chat GPT是什么? ChatGPT是一个基于大规模预训练语言模型的对话系统&...
杨永信被判刑了吗,杨永信被判刑... 杨永信被判刑了吗目录杨永信被判刑了吗杨永信被判刑了吗?杨永信这种禽兽不如的东西为什么还没死没被判罪?...
工程管理硕士要考哪些科目 极速... 工程管理硕士要考哪些科目目录工程管理硕士要考哪些科目工程管理硕士要考哪些科目 工程管理硕士考试...
请神容易送神难下一句是什么,请... 请神容易送神难下一句是什么目录请神容易送神难下一句是什么请神容易送神难,难缠贵,十二生肖里指的是那个...
汽车保养一次大概需要多少钱(4... 今天给各位分享汽车保养一次大概需要多少钱的知识,其中也会对4s店保养一次多少钱进行解释,如果能碰巧解...
linux——文本及字符的检索... 文件夹中的目标文件名搜索 find 查询某个文件夹中的某文件:find directo...
手把手教你使用QT语言专家实现... qt版本:5.14.1qtCreator版本:4.11.1硬件ÿ...