结构体

1 结构体定义与声明

1.1 定义结构体类型和声明结构体变量

struct Node{
    int data;
    struct Node *next
};     //定义一个结构体类型

struct Node node2;    //声明一个结构体变量

1.2 定义结构体类型并声明结构体变量

struct Node{
    int data;
    struct Node *next
}node2;     //定义一个结构体类型,并声明一个结构体变量

1.3 使用typedef定义结构体类型并声明结构体变量

typedef struct Str_Node{
    int data;
    struct Node *next
}Node;     //定义一个结构体类型,并将struct Str_Nodechng 重命名为 Node,后面声明结构体变量时可以直接使用Node ***

Node node2;    //声明一个结构体变量,相当于struct Str_Node node2
struct Str_Node node1    //声明一个结构体变量 如果不用这种方式,那么Str_Node也可以省略掉

2 结构体四字节对齐

1 案例一

struct Str_node{
    char a;    //4字节 
    int b;    //1字节 
    char c;    //8字节 
}str_node;
struct Str_node str_node;
len = sizeof(str_node);  //12, a和c各补齐后面的三个字节,形成四字节对齐
a
b
a

2 案例二

struct Str_node{
    char a;    //4字节 
    char b;    //1字节 
    int c;    //8字节 
}str_node;
struct Str_node str_node;
len = sizeof(str_node);  //8, a和b占用2个字节,再补齐后面2个字节,形成四字节对齐
a b
c

3 案例三

struct Str_node{
    char a;    //4字节
    char b;    //4字节 
    char c;    //4字节 
    char d;    //4字节 
    char e;    //1字节 
    int f;    //8字节 
}str_node;
struct Str_node str_node;
len = sizeof(str_node);  //12, a,b,c,d共占4个字节,d补齐后面3个字节,形成四字节对齐
a b c d
e
f

4 总结

一般默认是四字节对齐,如果想节省内存不需要四字节对,可以在定义结构体之前加入以下伪指令:

#pragma pack(1)     //设置1字节对齐
posted @ 2020-03-24 14:30  Mike_2019  阅读(183)  评论(0编辑  收藏  举报