C语言结构体是怎么样的
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章给大家分享的是有关C语言结构体是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。结构体结构是一些值的集合,这些值称为成员变量。结构的每个成员是不同类型的变量。
千家信息网最后更新 2025年11月15日C语言结构体是怎么样的
这篇文章给大家分享的是有关C语言结构体是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
结构体
结构是一些值的集合,这些值称为成员变量。结构的每个成员是不同类型的变量。
为什么要有结构体
比如说,描述一个学生时,需要有
名字
性别
年龄
身高
来一起描述,需要不同的变量,便有了结构体类型来描述
结构体的声明
struct tag{ member-lest//成员列表}variable-list;//变量列表例如一个学生
struct stu{ char name[20]; char sex[5]; int age; int hight;};//这里有没有变量列表都可以struct stu{ char name[20]; char sex[5]; int age; int hight;}s2,s3,s4;//s2,s3,s4全局变量struct stu s5;int main(){ struct stu s1;//结构体变量}特殊声明
在声明结构体时候,可以不完全声明
struct{ char c; int a; double a;}sa;//匿名结构体变量,必须在此处定义变量,否则以后不能使用int main(){ return 0;}编译器认为ps和&sa是两种类型,这种写法是错误的
数据结构:数据在内存中存储的结构

关于列表
struct node{ int date; struct node next;};int main(){ return 0;}这样无法判断结构体大小 只需在结构体存放能找到下一个结构体内容的指针即可

struct node{ int date; struct node* next;};int main(){ return 0;}也可以这样(重命名使用举例)
typedef struct node{ int date; struct node* next;}node;int main(){ struct node n2 = { 0 };//2者都可以使用 node n = { 0 };//尽量不对结构体使用typedef}结构体变量的定义和初始化
struct point{ int x; int y;}p1; //声明类型同时定义变量p1struct point p2;//定义结构体变量p2//初始化:定义变量的同时赋初值struct point p3 = { 1,2 };struct stu //类型声明{ char name[15];//名字 int age; //年龄};struct stu s = { "zhangsan",20 };//初始化struct node{ int date; struct point p; struct node* next;}n1 = { 10,{4,5},NULL }; //结构体嵌套初始化struct node n2 = { 20,{5,6},NULL };//结构体嵌套初始化结构体大小计算
先来观察下列代码
#includeint main(){ struct S1{ char c1; int i; char c2;};printf("%d\n", sizeof(struct S1));//练习2struct S2{ char c1; char c2; int i;};printf("%d\n", sizeof(struct S2));//练习3struct S3{ double d; char c; int i;};printf("%d\n", sizeof(struct S3));//练习4-结构体嵌套问题struct S4{ char c1; struct S3 s3; double d;};printf("%d\n", sizeof(struct S4));return 0;}
发现并不是数据类型大小的简单相加
存在对齐
如何计算?
首先得掌握结构体的对齐规则:
1. 第一个成员在与结构体变量偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的值为8
3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
为什么存在内存对齐 ?
大部分的参考资料都是如是说的:
1. 平台原因(移植原因):
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特
定类型的数据,否则抛出硬件异常。
感谢各位的阅读!关于"C语言结构体是怎么样的"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
结构
变量
成员
类型
大小
数据
地址
整数
最大
内容
平台
硬件
语言
不同
内存
原因
同时
名字
学生
年龄
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
阿里云38一年的服务器
软件工程数据库技术应用专业分析
苹果id解锁数据库
大学生网络安全ppt背景
纵目科技工业互联网融资
十大院士共同揭幕网络安全会
泰拉瑞亚服务器进群开荒最新
提升网络安全水平
plc软件开发平台有哪些
数据库er图设计题期末考试
免费手机软件开发工具
王者怎么寻找两三年前玩的服务器
气象数据库系统的部署方式
专业服务器与一般电脑区别
目前网络安全的主要威胁
mysql数据库配置地址
结合生活谈谈对网络安全的认识
别人转发给我的彩票数据库
网络安全事件培训
网络安全人才技能证书有用吗
scum服务器运营系统
怎么自己搭服务器
国泰安数据库中的报表类型
《网络安全法》第二十七条
中网云服务器
信息网络安全管理分工
重点关注网络安全概念
数据库id怎么重置
如何链接到数据库or
网络安全隔离装置前景