C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由int、char、float等基本类型组成的。你可以认为结构体是一种聚合类型
本质
一些值的集合。
简单使用
#include <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
struct A {
int a;
};
int main() {
struct A a = { 333 };
struct A* b = &a;
printf("%d\n", b->a);
return 0;
}
效果:

到此这篇关于C语言简明清晰讲解结构体的文章就介绍到这了,更多相关C语言结构体内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言简明清晰讲解结构体
基础教程推荐
- g++: const 丢弃限定符 2022-10-07
- C语言植物大战数据结构二叉树递归 2023-04-09
- 05-C语言进阶——动态内存管理 2023-11-20
- C语言的三种条件判断语句你都了解吗 2023-03-05
- character-encoding – Linux中最常见的C语言编码(和Unix?) 2023-11-21
- Qt数据库应用之实现通用数据库请求 2023-03-18
- 纯C++代码详解二叉树相关操作 2023-05-15
- VisualStudio2010安装教程 2023-01-05
- 利用QT设计秒表功能 2023-05-30
- C语言数组长度的计算方法实例总结(sizeof与strlen) 2023-04-26
