-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
结构体的基本概念和结构体变量的初始化
一、基本概念
结构体:由用户自己建立由不同类型的数据组成的组合型的数据结构
一般形式:
struct 结构体名
{成员列表};
例如:定义一学生的结构体
struct stu{
int num;
char *name;
char sex;
float score;
}; // 注意 此处的分号不能省
二、结构体变量定义的方法
1、先定义结构体,然后再定义结构体变量
定义一个结构体
struct student
{
//学生的学号
int num;
//学生的姓名
char *name;
//学生年龄
int age;
//学生成绩
float score;
};
注意:(1)结构体变量定义完成以后,计算机并不会给结构体分配内存空间,在定义结构体变量后再分配存储空间
定义结构体变量:struct 结构体名 结构体变量名;
struct student stu1;
stu1是变量,他是student类型的,stu1可以存储学生的学号、姓名、年龄、成绩
也可以定义多个结构体变量
struct student stu2,stu3,stu4...;
2、定义结构体的同时定义结构体变量
struct student
{
//学生的学号
int num;
//学生的姓名
char *name;
//学生年龄
int age;
//学生成绩
float score;
}stu1,stu2,stu3...;
3、使用匿名结构体定义结构体变量
struct
{
//学生的学号
int num;
//学生的姓名
char *name;
//学生年龄
int age;
//学生成绩
float score;
}stu1,stu2,stu3...;
三、结构体变量中成员的访问
一般形式为:结构体变量名 . 成员名
四、结构体变量的初始化
1、先定义结构体变量再初始化
定义结构体变量
struct student
{
//学生的学号
int num;
//学生的姓名
char *name;
//学生年龄
int age;
//学生成绩
float score;
}stu1;
变量成员初始化
stu1 . num = 38;
stu1 . name = "张三";
stu1 . age = 18;
stu1 . score = 58f;
struct student stu2 = {38,"张三",18,58f};
四、结构体变量存储原理
结构体成员变量对齐:结构变量成员的数据类型不一致,为了提高数据传输速度,计算机每次读取变量成员的起始地址的值是某个数k的倍数,k称为该数据类型的对齐模数
五、结构体变量占用内存大小的计算
1、先找对齐模数,对齐模数是结构体变量成员中占内存最大的那个
2、计算结构体变量中各个成员所占的字节和
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个结构体
struct student
{
//学生学号 占4个字节
int num;
//学生姓名 占1个字节
char *name;
//学生年龄 占4个字节
int age;
//学生成绩 占4个字节
float score;
}stu1;
//给结构体变量在内存中占有的大小
printf("%d\n",sizeof(stu1));
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个结构体
struct A
{
//占2个字节
short a;
//占1个字节
char c; //以上两个存在一起,
//占4个字节
int i;
//占4个字节
float f;
}a;
//给结构体变量在内存中占有的大小
printf("%d\n",sizeof(a));
system("pause");
return 0;
}
调整结构体变量的成员位置后结果也不一样
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义一个结构体
struct A
{
//占2个字节
short a;
//占4个字节
int i;
//占1个字节
char c;
//占4个字节
float f;
}a;
//给结构体变量在内存中占有的大小
printf("%d\n",sizeof(a));
system("pause");
return 0;
}