C语言结构体是怎么样的
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关C语言结构体是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。结构体结构是一些值的集合,这些值称为成员变量。结构的每个成员是不同类型的变量。
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
耶加雪菲
广州淘业互联网络科技
中关村互联网科技集团
互联网与科技发展
北京互联网科技
齐家互联网科技
广州互联网络科技有限公司
善班互联网科技有限公司
科技互联网公司logo
国外互联网科技网站
富国互联网科技创新基金
中国的互联网科技企业的崛起
互联网软件和科技
宝灵互联网科技有限公司
成都互联网科技公司工作好不好
科技类公司包括互联网吗
江苏互联网智能科技软件
互联网硬科技公司
青岛互联网科技园
武汉亿视互联网科技有限公司
厦门中拓互联网络科技有限公司
金融科技 互联网金融
互联网金融公司科技
互联网科技公司有哪些
互联网科技实习生岗位职责
互联网科技寓意
移动互联网年度科技创新
开一家科技互联网公司需要多少钱
中国互联网十大科技股排名
互联网科技包装股