第8章 指针-【千锋教育】C语言程序设计(微课)
2023-03-21
|
40页
|
110人阅读
|
0人下载
教辅
内容正文:
第8章 指针
指针
通过指针读写
指针运算
指针与数组
const与指针
void指针
C语言程序设计
内存和地址
指针变量的定义
通过指针进行读写
空指针
变更指针保存的地址
指针自身的地址
01
02
04
05
03
目 录
CATALOUGUE
初心至善 匠心育人
指针运算
指针与数组
指针的类型
const与指针
void指针
01
02
04
05
03
目 录
CATALOUGUE
初心至善 匠心育人
理解指针的概念
掌握const与指针
熟悉指针的运算
掌握指针与数组
学 习 目 标
LEARNING OBJECTIVES
初心至善 匠心育人
前面提到过,变量其实就是用来放置数值等内容的“盒子”,每个盒子都可以容纳数据,并通过一个编号来标识。盒子也有自己的地址,计算机要找到某个盒子,必须知道该盒子的地址。
计算机的内存是以字节为单位的一段连续的存储空间,每个字节单元都有一个唯一的编号,这个编号就称为内存的地址。如图所示。
图中每个盒子的存储类型为字节,每个字节都包含了存储一个字符所需要的位数。在许多现代的机器上,每个字节包含8个位,可以存储无符号值0至255,或有符号值-128-127。图中并没有显示这些位置的内容,但内存中的每个位置总是包含一些值。每个字节通过地址来标识,如图8.1中方框上面的数字所示。
8.1 内存和地址
初心至善 匠心育人
为了存储更大的值,可以把两个或更多个字节合在一起作为一个更大的内存单位。例如,许多机器以字为单位存储整数,每个字一般由2个或4个字节组成。接下来用一张图来表示4个字节的内存位置,如图所示。
举一个例子,这次盒子里显示了内存中4个整数的内容,如图所示。
8.1 内存和地址
这里显示了4个整数,每个整数都位于对应的盒子中。如果大家记住了一个值的存储地址,那么以后可以根据这个地址取得这个值。
要记住所有这些地址实在太繁琐了,因此高级语言所提供的特性之一就是通过名字而不是地址来访问内存的位置。接下来使用名字来代替地址,如图所示。
初心至善 匠心育人
当然,这些名字就是变量。所有这些变量正是为了人们而提供的一种更方便的方法用来记住地址——硬件仍然通过地址访问内存位置。在C语言中可以通过取地址运算符&来获取系统将某种数据存放在内存中的位置。
第5行:通过取地址运算符&来获取变量a的地址,然后通过printf函数将其输出到屏幕上。%p表示以十六进制形式输出地址。这个地址并不是始终不变的,它是由机器和操作系统来决定的,无法预先知道。
8.1 内存和地址
初心至善 匠心育人
先举个例子,有个A盒子,打开A盒子有如下两种方法:第一种方法将A钥匙带在身上,需要时直接打开(直接访问);第二种方法将A钥匙放在B盒子,需要时,打开B盒子取出A钥匙,再打开A盒子(间接访问)。
如果把盒子比为内存,钥匙类比为内存地址,这时就可以把B盒子称为指针,即存放内存地址的变量称为“指针变量”。它与普通变量一样占用一定的存储空间,但它所包含的数值内存将会被解释成一个地址。这个地址可以看作是一个指示方向,它能够告诉程序在内存的哪个位置可以找到对应的数据。
8.2 指针变量的定义
初心至善 匠心育人
从标准意义来讲,指针是指内存地址,同时也指代一种数据类型。而指针变量是指针类型的变量,它存放的内容是指针(某个内存地址)。虽然经常把指针变量简称为指针,但读者应该明确知道“指针”是地址,是一个常量;“指针变量”是存储着地址的指针类型的变量。指针变量的定义是使用一个特殊的符号*来区别的,具体语法格式如下:
具体示例如下:
8.2 指针变量的定义
初心至善 匠心育人
接下来通过一个案例来说明指针变量的定义。具体示例如下。
第4行:定义了指针变量 p、q,*用来说明该变量是一个指针变量,注意它的类型是int型。此外,还定义了一个整型变量a。
第5行:将变量a的地址赋给变量p,指针变量p中存储的就是变量a的地址。
第6行:将指针变量p的值赋给q,这时p与q中存储的是同一块内存地址。
第7行:输出变量a的地址。
第8行:输出变量p中存储的地址。
第9行:输出变量q中存储的地址。
8.2 指针变量的定义
初心至善 匠心育人
定义了指针之后,下一步就是如何使用已经定义的指针对它指向的内存进行读写。C语言提供了一个间接访问运算符*,通过它可以得到内存地址中的内容,进而进行读写操作。具体示例如下。
8.3 通过指针进行读写
初心至善 匠心育人
接下来通过案例来说明指针中间接访问运算符*的用法。具体如下:
第6行:&表示取变量的地址,*表示取内存地址中的内容,因此,&与*互为逆运算,*(&a)等价于a。
第7行:相当于把第6行中(&a)换为p,因为指针变量p中存储的就是变量a的地址,所以两者等价,*p等价于a。
第8行:将a的值赋
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。