C语言串讲-2之指针和结构体
计算机组成:冯 诺依曼架构
编写程序:高级语言 硬件执行:机器语言(一种非常底层、特定的指令集)
机器语言:计算机可以将二进制代码存储在内存中,并且执行这些代码。 二进制位:也称为位(bit), 基数为2 的数字中的 0 或 1,它是信息的基本组成元素。 指令:计算机硬件所能理解并服从的命令(也是二进制位串)。
在计算机内部,指令和数据并没有本质的区别,它们都是以二进制形式存储的。
汇编语言:以助记符形式表示的机器指令。
高级语言:高级编程语言 C+ +、 Java 等可移植的语言,由一些单词和代数符号组成,可以由编译器转换为汇编语言。
存储器容量
在描述存储容量:1bit 1byte(1B) 1KB 1MB 1GB 1TB
在存储器,一个二进制位称为1bit。 1B:字节,1B=8bit
1B 1KB 1MB 1GB 1TB 由小到大,换算单位是2^10
数据类型
数据类型:定义内存空间⼤⼩的⼀个代名词,⽅便编译器能够合理的转换为对应的指令来操作内存空间。
以64位系统为例: char 1B int 4B long long 8B float 4B double 8B
一个特殊的数据类型,指针,是存放数据的内存单元地址。
指针
为了便于管理,存储器中,以8位(1字节)的大小构成一个存储单元。 计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址”,每个存储单元拥有一个唯一的地址。
内存地址通常以十六进制形式给出。
存储内存地址的变量就是指针类型的。
64位系统中 指针类型 占 8B
为什么需要指针?
1.在不同区域之间的代码可以共享数据(直接通过指针指向相同的内存空间),特别是结构体,一个结构体中有很多数据,一个结构体变量就会占用大量空间。用指针去共享节省时间和内存。
2.指针占用的字节数是相同的。在(硬件/操作系统)数据存储按字节存储的。指针不同于一般变量,存的是变量的地址,在同一架构下地址长度都是相同的,所有不同类型的指针长度都一样。一般32位系统,指针长度为4个字节,64位则是8个字节。
3.一些操作必须使用指针, 例如申请内存。。。malloc :(void*)malloc(sizeof)
ig:(int *)malloc(size)
4.可以用指针搞一些复杂的结构-链表/树/图。。多重指针(二级指针)
变量名和(指针)地址的关系:学校名和详细地址
结构体
1数组允许定义可存储相同类型数据项的变量。 结构体是C编程中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项.
struct:声明结构体的关键字
tag 是结构体标签,是一个可选的标志,它是用来引用该结构体的快速标记。
member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。
成员后面用分号;隔开,结构类型定义的末尾也有个分号;
variable-list 结构变量,是可选的,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。
结构体变量的声明/定义
1、类型定义和变量声明分开
2、类型定义的同时声明变量
结构体:指针与结构体
结构体指针: 结构体中的变量在内存中连续存放,结构体指针指向第一个变量。 C 语言中,我们可以使用 sizeof 运算符来计算结构体的大小,sizeof 返回的是给定类型或变量的字节大小。对于结构体,sizeof 将返回结构体的总字节数,包括所有成员变量的大小以及可能的填充字节。
访问成员变量:用“.”还是“->” 结构体变量,用 “.” 结构体指针变量,用 “->”