7指针1

指针变量也是变量

1. 初识:结构体

可以通过 C 语言里面的工具来描述这种类型的特点,这个可以用来描述和定义新类型的工具,就叫做:结构体。

struct point {
    // 描述这个类型的组成部分
};

struct point,也就是结构体点类

struct point p1, p2;

通过点类来定义对象

struct point {
    int x, y; 
};

在这个过程中,有没有一种盖房子的感觉?先有地基,再盖一楼,然后是二楼。也就是在程序中,先有基础数据类型,然后是基于这些基础数据类型,定义出新的数据类型。

让 p1 代表点 (2, 3),让 p2 代表点 (7, 9),代码如下:

p1.x = 2;
p1.y = 3;
p2.x = 7;
p2.y = 9;

点“.”运算符,这个也叫做“直接引用”运算符,p1.x,意思是 p1 变量里面的 x 字段。

2. 结构体变量的大小

struct point p;
sizeof(p);
sizeof(struct point);

这两种使用 sizeof 方法的代码均能正确的告诉你一个 struct point 类型的变量占用的存储空间大小。

Data1 结构体,只包含一个整型和两个字符型字段,所占用的空间大小应该是 4+1+1=6 个字节啊,怎么变成了 8 个字节?

Data2 结构体,和 Data1 结构体包含字段种类都是一样的,那既然 Data1 是 8 个字节,为什么 Data2 是 12 个字节呢?

对于某个结构体类型而言,其存储单元大小,等于它当中占用空间最大的基础类型所占用的字节数量。

对于 Data1 结构体类型来说,整型是其当中占用空间最大的基础类型,它的一个存储单元的大小,就是 4 个字节,等于它当中整型字段所占用的字节数量。也就是说,Data1 这个结构体类型,要不就占用 1 个存储单元,即 4 个字节的空间,要不然就占用 2 个存储单元,即 8 个字节的存储空间,不会出现 6 个字节的情况。

结构体的字段在内存中存储的顺序,是按照结构体定义时的顺序排布的,而且当本存储单元不够安放的时候,就从下个存储单元的头部开始安放。

在设计结构体的时候,不仅要设计新的结构体类型中所包含的数据字段,还需要关注各个字段之间的顺序排布。

3. 指针变量也是变量

指针是变量,指针是一种用来存储地址的变量!

int a = 123, *p = &a;
printf("%d %p %d\n", a, p, *p);

p 变量中存储的就是 a 变量的首地址,也就是说,我们可以通过 p 变量中所存储的信息。

小结

  1. 结构体是用来创造新类型的利器,而结构体类型所占存储空间大小,与其内部字段的组成和各个字段的顺序排布均有关。
  2. 指针变量也是变量,这是一种存储地址信息的变量。
posted @ 2020-03-31 22:04  insist钢  阅读(137)  评论(0编辑  收藏  举报