结构体类型
结构体类型属于一种非基本数据类型的 “私人定制” 新类型,它的尽头就是由基本数据类型组成。
1、由来
有一个家教老师开始招生辅导学生学习,来了一个学生,可以一对一辅导,老师这样记录学生信息(名字,学号,年龄)。
char name[] = "jiemu";
char id[]="1068";
int age = 10;
挺简单,这样记录OK啦。又来两个学生,用同样的方法记录学生信息。
char name1[] = "jiemu";
char id[]="1069";
int age = 11;
char name2[] = "bulu";
char id[]="1068";
int age = 10;
char name3[] = "kaidi";
char id[]="1070";
int age = 9;
老师讲得太好了,一下子增加20个学生,一想到这样记录信息,头真大。有没有更好的办法啊???
有的,用结构体就可以轻松解决烦恼。每个学生的信息类型是一样的,把信息放到一个结构体里管理,就方便多了。
struct _student
{
char name[10];
char id[10];
int age;
};
struct _student stu1,stu2,stu3......,stu20;
2、定义
结构体是一种新的类型,属于“私人定制”类型,顾名思义,你想怎么定义就怎么定义。
如何定义一个结构体:
struct 结构体名
{
成员1;
成员2;
......
成员n;
};
提示:成员可以是基本的数据类型,指针,数组或其他结构类型
结构体里的成员的类型可以是基本数据类型,指针,数组,其它结构体类型。
既然它是类型,就可以定义变量。
学生类可以看作是一种结构体类型,学生实体可以看作是该类型的变量,变量本身的特性就是成员。
怎么判断该类型是结构体类型?
1、必须有struct这个关键字。
2、有结构体名(可以省略)。
3、最后有一个分号。
3、大小
结构体类型在定义的时候并不占内存,而是在定义结构体变量后才占用内存。
那么一个结构体变量占多大内存呢?
方法很简单,除了跟最占内存的基本数据类型成员有关,还跟结构体类型中的成员定义顺序有关。
结构体变量的大小 = “ 最大基本数据类型成员所占字节 ” 的整数倍
通俗理解:把类型看成一个矩形模具,把变量的成员放进模具里,直到放完为止,最终模具大小就是变量的大小了。
下文的代码采用Dev-C++软件测试,使用MinGW GCC 32位的编译器。
基本数据类型的长度与操作系统有关,如:
int类型在32位系统占 4字节,在64位系统占 4或8字节。
long类型在32位系统占 4字节,在64位系统占 8字节。
#include <stdio.h>
int main(void)
{
printf("sizeof(char) = %d\n", sizeof(char));
printf("sizeof(int) = %d\n", sizeof(int));
printf("sizeof(unsigned int) = %d\n", sizeof(unsigned int));
printf("sizeof(short) = %d\n", sizeof(short));
printf("sizeof(unsigned short) = %d\n", sizeof(unsigned short));
printf("sizeof(long) = %d\n", sizeof(long));
return 0;
}
运行结果:
sizeof(char) = 1
sizeof(int) = 4
sizeof(unsigned int) = 4
sizeof(short) = 2
sizeof(unsigned short) = 2
sizeof(long) = 4
struct _map
{
char a; //成员1
unsigned char c; //成员2
short b; //成员3
long d; //成员4
};
struct _map
{
char a; //成员1
long d; //成员2
short b; //成员3
unsigned char c; //成员4
};
其它情况成员的变量占用字节数。
#include <stdio.h>
struct stt
{
char c_var1;
int i_var;
char c_var2;
};
int main()
{
struct stt sd = { 'c',8,'c' };
printf("%d\n", sizeof(sd));//12
return 0;
}
运行结果输出:12
#include <stdio.h>
struct stt
{
char c_var1;
char c_var2;
int i_var;
};
int main()
{
struct stt sd = { 'c','c',8};
printf("%d\n", sizeof(sd));//8
return 0;
}
运行结果输出:8
结构体的实践
变量需要先定义,再使用。在定义的同时可以初始化变量。
1、初始化
结构体变量初始化就是给每个成员合理地赋值。
赋的值一定要与成员的类型一致,否则编译不成功。
2、嵌套结构体
前面提到结构体成员可以是其它结构体变量。
#include <stdio.h>
struct date
{
int hour;
int min;
int sec;
};
struct task
{
char c_des[10];
char c_name[8];
struct date times;
};
int main()
{
struct task today = {"July","shenz",12,30,50};
return 0;
}
运行查看成员的值。
访问成员
内容持续补充中…