目录
  • 本质
  • 简单使用
  • 一些写法
  • 我套我自己
  • 内存对齐
    • 举例-int char char
    • 举例-char int char
    • 举例-char char int
  • 由结构体指针访问成员

    本质

    一些值的集合。

    简单使用

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

    效果:

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

    内存对齐

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

    第一个放到首个地址处。

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

    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语言简明清晰讲解结构体

    图解:

    int放在首位。

    char占1字节,直接放。

    第二个char也是。

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

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

    举例-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语言简明清晰讲解结构体

    图解:

    char直接放。

    int从第四个开始放。

    char直接放。

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

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

    举例-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语言简明清晰讲解结构体

    图解:两个char直接放。

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

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

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

    由结构体指针访问成员

    就是一种箭头的写法。

    #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语言简明清晰讲解结构体

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。