《人人都能学会的编程入门课》学习笔记(4)

275 阅读3分钟

语言基础篇:C 语言的指针。

结构体 struct

C 语言中可以用来描述和定义新类型的工具

// 结构体:点类型
struct point {
  // 描述这个类型的组成部分
  int x, y;
}

在程序中,先有基础数据类型,然后是基于这些基础数据类型,定义出新的数据类型。

也可以用我们自己定义出来的新类型去定义另一个更新的类型。

所谓的基础数据类型(或功能模块),就是程序语言给我们内置的数据类型(或功能模块)。

结构体变量的大小

结构体变量的大小

Data1Data2 两个结构体都是由两个字符型字段和一个整型字段组成的。但是两者所占用的存储空间并不一致。

  1. 内置类型需要占用若干个字节,以字节为单位;结构体变量的存储,是以存储单元为单位的。

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

    最小存得下原则

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

结构体内存占用情况

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

结构体是用来创造新类型的利器。结构体类型所占存储空间大小,与其 内部字段的组成 和各个 字段的顺序 排布都有关系。

指针变量也是变量

什么类型的值就用什么类型的变量进行存储。

指针变量,一种存储地址的变量。

* 运算符放到变量名的前面,叫做“取值”运算符。如:*p 即,取值 p 所指向存储区的内容。

// 指针变量p
// 根据p变量中的内容找到一个存储区的首地址,然后再根据p的类型(int)就可以确定要取几(4)个字节中的内容。
int *p;

指针变量的类型,除了用来确定取值时,确定覆盖存储区的大小,还可以做加减操作。

地址这种类型的值支持加减法操作。

指针变量类型决定在加法或者减法时,增加或者减少的地址长度

指针变量的大小

无论什么类型的指针,存储的值都是某个字节的地址。而在一个系统中,无论是哪个字节的地址,二进制数据长度都是一样的。所以,无论什么类型的指针,所需要存储的值的底层表示长度是一样的,即所占用的存储空间是一样的

结构体变量引用字段,就直接引用.);如果是指针想引用字段,就是间接引用->)。

指针小结

  1. 指针的类型,决定了指针取值时所取的字节数量;
  2. 指针的类型,决定了指针加减法过程中所跨越的字节数量;
  3. 无论什么类型的指针,大小都相等(地址信息是统一规格的)。