C语言简明清晰讲解结构体
目录
- 本质
- 简单使用
- 一些写法
- 我套我自己
- 内存对齐
- 举例-int char char
- 举例-char int char
- 举例-char char int
- 由结构体指针访问成员
本质 一些值的集合。
简单使用
#include struct User { char uName[20]; char uPass[20]; }; int main() { struct User u1 = {"abc","123" }; printf("%s\n", u1.uName); printf("%s\n", u1.uPass); return 0; }
效果:
文章图片
一些写法 声明之后,可以立即创建实例。
也可以单独声明。
#include struct User { char uName[20]; char uPass[20]; } u1, u2, u3; struct User u4; int main() { struct User u5; return 0; }
匿名结构体:我用了,你们别想再用。
struct { char uName[20]; char uPass[20]; }x;
我套我自己 只能套指针,因为空间有限。
举例:链表。
#include struct Node { int val; struct Node* next; }; int main() { struct Node a = { 333,NULL }; struct Node b = { 666,&a }; printf("%d\n", (*b.next).val); return 0; }
效果:
文章图片
内存对齐 结构体放成员,是一个一个放的。
第一个放到首个地址处。
第二个开始,计算一个对齐数,该数是以下两个值的较小者:
1,VS的默认值,8。
2,该成员所占字节数。
实际的偏移量是对齐数的整数倍。
最后,结构体的大小是最大对齐数的整数倍。
举例-int char char
#include struct A { int a; char b; char c; }; int main() { struct A a = { 1,1,1 }; printf("%lld", sizeof(a)); return 0; }
效果:8
文章图片
图解:
int放在首位。
char占1字节,直接放。
第二个char也是。
最后长度,按int的字节数的整数倍,也就是8。
文章图片
举例-char int char
#include struct A { char b; int a; char c; }; int main() { struct A a = { 1,1,1 }; printf("%lld", sizeof(a)); return 0; }
效果:12
文章图片
图解:
char直接放。
int从第四个开始放。
char直接放。
最后长度:从9开始第一个4的倍数,12。
文章图片
举例-char char int
#include struct A { char b; char c; int a; }; int main() { struct A a = { 1,1,1 }; printf("%lld", sizeof(a)); return 0; }
效果:8
文章图片
图解:两个char直接放。
int从下一个4的整数倍,也就是第五个开始放。
最后长度:从8开始第一个4的倍数,8。
文章图片
由结构体指针访问成员 就是一种箭头的写法。
#include struct A { int a; }; int main() { struct A a = { 333 }; struct A* b = &a; printf("%d\n", b->a); return 0; }
效果:
文章图片
【C语言简明清晰讲解结构体】到此这篇关于C语言简明清晰讲解结构体的文章就介绍到这了,更多相关C语言结构体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- C语言简明清晰讲解枚举
- C语言数据结构与算法时间空间复杂度基础实践
- C语言数据结构之算法的时间复杂度
- Python代码显得Pythonic(区别于其他语言的写法)
- C语言简明讲解预编译的使用
- 数据结构(c语言实现)|<数据结构>还不会写单向链表(我手把手教你)
- 数据结构(c语言实现)|<数据结构>刷题笔记——链表篇(一)(有动图详解)
- 手撕常用排序算法|希尔排序——C语言实现
- 数据结构|C语言实现插入排序——希尔排序算法
- 经典排序——希尔排序——C语言版