C语言简明清晰讲解结构体

本质

一些值的集合。

简单使用


 	#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;
 	}

效果:

C语言简明清晰讲解结构体插图

一些写法

声明之后,可以立即创建实例。

也可以单独声明。


 	#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,&amp;a };
 	     printf("%d\n", (*b.next).val);
 	     return 0;
 	}

效果:

C语言简明清晰讲解结构体插图1

内存对齐

结构体放成员,是一个一个放的。

第一个放到首个地址处。

第二个开始,计算一个对齐数,该数是以下两个值的较小者:

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

C语言简明清晰讲解结构体插图2

图解:

int放在首位。

char占1字节,直接放。

第二个char也是。

最后长度,按int的字节数的整数倍,也就是8。

C语言简明清晰讲解结构体插图3

举例-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

C语言简明清晰讲解结构体插图4

图解:

char直接放。

int从第四个开始放。

char直接放。

最后长度:从9开始第一个4的倍数,12。

C语言简明清晰讲解结构体插图5

举例-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

C语言简明清晰讲解结构体插图6

图解:两个char直接放。

int从下一个4的整数倍,也就是第五个开始放。

最后长度:从8开始第一个4的倍数,8。

C语言简明清晰讲解结构体插图7

由结构体指针访问成员

就是一种箭头的写法。


 	#include <stdio.h>
 	struct A {
 	     int a;
 	};
 	int main() {
 	     struct A a = { 333 };
 	     struct A* b = &amp;a;
 	     printf("%d\n", b->a);
 	     return 0;
 	}

效果:

C语言简明清晰讲解结构体插图8

到此这篇关于C语言简明清晰讲解结构体的文章就介绍到这了,更多相关C语言结构体内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

标签

发表评论