结构体 STRUCT 怎么用?

首先,结构体是什么?

当处理一部分问题时如果定义一大堆变量可能会显得麻烦,也不能表现出它们之间的内部关系。比如常见的学生管理系统,学生的个人信息包括学号(int),姓名(char),性别(char),年龄(int),成绩(float)等资料,再比如日期中的年月日等。如果用数组把这所有的资料融入进去,显然是不可以的,毕竟类型都不同,而数组只能是一个类型的,比如常见的int char 型数组。而C语言是允许用户自己建立由不同类型数据组成的组合型的数据结构,即结构体(struct)。

结构体的格式:struct tag {属性};(属性内不能赋予其初值)

结构体的声明:struct A

                         {
                               char ch;
                               int a;
                          }AAa,AAb; //(这个分号不能丢)  AAa AAb都是定义A的同时定义给A的变量

那既然声明的时候不能赋予其初值,那就只能在main函数里进行。

int main()
{
struct A Aa;//定义结构体的变量名
Aa.a=10;
Aa.ch='a';
return 0; }

如果结构体为空?

C++里面空的结构体大小为1;
C里面----->不支持定义空的结构体 至少包含一个对象

typedef在结构体中也有不容小觑的作用,当你的结构体名和变量名过长时,每次调用看起来都会很麻烦,而typedef就可以发挥它的作用给这个结构体起个别名,即给结构体加上typedef后,变量会提升为这种类型。

结构体的访问有两种运算符:.和->,.运算符适用于一般变量的引用,有指针时最好使用->(->相当于解引用),也可以用比如(*p).a,如果用->可表示为:p->a;->显然更简洁,.优先级高于*  ,所以如果不加括号就相当于*(p.a)

结构体的大小:

有时候它的结果会让人很懵逼。

struct A

{

char ch;

int a;

}

很多人的答案都会是5,char1个字节,int2个字节,这不正好5个字节。可是答案却是8,这是为啥?

struct的大小会采用内存对齐的方式来计算当前结构体所占内存大小,内存对齐又分为向前对齐和向后对齐。

什么是内存对齐?

放在数据类型字节数能整除的内存地址号下标内。

想象一下32位的计算机,从0~31号,char1个字节先放,int4个字节必须得从4号下标开始存放,所以是8个字节。

再比如

struct  B

{

char ch1;

char ch2;

int a;

double b;

}      //16

struct C

{

char ch1;

int a;

char ch2;

double b;

}      //24   可以想想为啥!

猜你喜欢

转载自blog.csdn.net/Disremembrance/article/details/81170406