1. 概念
C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。你可以认为结构体是一种聚合类型。
在实际开发中,我们可以将一组类型不同的、但是用来描述同一件事物的变量放到结构体中。例如,在校学生有姓名、年龄、身高、成绩等属性,学了结构体后,我们就不需要再定义多个变量了,将它们都放到结构体中即可。
2.定义
例如:我们定义一个学生的姓名,年龄,身高和三门成绩
struct student
{
char name[30]; //姓名,字符串形式
int age; //年龄,整形
float height; // 身高,浮点型
float sorces[3]; // 成绩,浮点型
};
3.初始化
初始化一般都是:
数据类型 变量名 = 变量;
例如
int a = 3;
那么结构体也不例外,我们自定义了结构体,结构体的类型就是
struct student
所以,初始化结构体就是:
struct student stu = {"张三",18,1.8,78,88,98};
4.访问
- 变量名.成员
方法一:
#include <stdio.h>
struct student
{
char name[30]; //姓名,字符串形式
int age; //年龄,整形
float height; // 身高,浮点型
float sorces[3]; // 成绩,浮点型
};
int main()
{
struct student stu = {"张三",18,1.8,78,88,98};
printf("%s\n",stu.name);
printf("%d\n",stu.age);
printf("%.1f\n",stu.height);
for(int i = 0; i < 3; i++)
{
printf("%.1f ",stu.sorces[i]);
}
printf("\n");
return 0;
}
方法二:
指针变量->成员
数据类型 *指针变量名;
#include <stdio.h>
struct student
{
char name[30]; //姓名,字符串形式
int age; //年龄,整形
float height; // 身高,浮点型
float sorces[3]; // 成绩,浮点型
};
int main()
{
struct student stu = {"张三",18,1.8,78,88,98};
struct student *p = NULL;
p = &stu;
printf("%s\n",p->name);
printf("%d\n",p->age);
printf("%.1f\n",p->height);
for(int i = 0; i < 3; i++)
{
printf("%.1f ",p->sorces[i]);
}
printf("\n");
return 0;
}
切记:->
左边必须是个指针才能用
5. 字节对齐
一次性分配多少个字节
自然对齐方式(32OS):
char:1字节对齐
short:2字节对齐
int:4字节对齐
float:4字节对齐
double:4字节对齐,分配的时候分配两次就可以了
字节对齐:选成员中最大的那个对齐
#include <stdio.h>
#define N 21
struct student
{
char name[N];
int age;
};
int main()
{
struct student Stu;
printf("%ld\n",sizeof(Stu));
return 0;
}
//sizeof(Stu)=28
int 占4个字节,char 占一个字节,char name[21];占了21个字节。
字节对齐,21/4=5.2,所以要再一个开辟int型的空间,char占了24个字节,所以总共占了28个字节。
6.给结构体取别名
方法1:
typedef int data_type; //给int取别名为data_type
struct student
{
char name[N];
data_type age;
};
typedef struct student //g给结构体 struct student 取别名为:Stu。最常用的方法
{
char name[N];
data_type age;
}Stu;
方法二:
struct student
{
char name[N];
int age;
};
int main()
{
typedef struct student Stu; //在主函数中取别名
Stu stu;
}
本篇的结构体分享就到这里了,有错误欢迎指出!