C语言学习09:结构体

张建 lol

声明结构体

1
2
3
4
struct st{
int a;
char ch[4];
}

定义结构体

1
2
3
4
struct st{
int a;
char ch[4];
}t1;

注:t1:结构体变量名

初始化结构体

1
struct test t1 = {5};

结构体数组

1
struct test arr[3] = {1,2,3};

结构体指针

struct 结构体名 *变量名;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

struct test{
int a;
char c;
char arr[5];
}t1;

int main(int argc, const char * argv[]) {
// 初始化结构体
struct test t1 = {.a=1,.c='a',.arr="abc"};
printf("%d %c %s\n",t1.a,t1.c,t1.arr);

return 0;
}

结构体指针获取成员变量

  1. (*ptr).structMenber

  2. ptr->structMenber

注:.运算符 高于 * ,所以(*ptr)括号不能少

字节对齐

#pragma pack(n):指定按照n字节对齐规则进行存储

字节对齐的原因

  • 计算机内存以字节为单位划分,CPU通过 地址总线 来访问内存,一次能处理几个字节,地址总线就读取几个字节。32位一次读取4个字节。64位一次读取8个字节。

  • 内存对齐原因:避免存取效率的损失

总结

  • 结构体不占内存空间,是一个创建变量的 模板
  • 结构体 成员变量 需要开辟内存空间
  • Post title:C语言学习09:结构体
  • Post author:张建
  • Create time:2023-02-15 00:12:43
  • Post link:https://redefine.ohevan.com/2023/02/15/C学习/C语言学习09:结构体/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.