- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 变量的间接访问——指针
第 7 章 变量的间接访问——指针
指针
指针作为函数的参数
本章的基本内容是:
【任务7.1】获取密电码
【问题】某谍报组织有一个重要信息——密电码存放在银行的一个保险箱A中,由于不知道保险箱A的编号,所以不能直接获得密电码,但知道保险箱A的编号存在另一个保险箱B中,如何通过保险箱B获得密电码?
【想法】设保险箱A和B分别用变量key 和p表示,保险箱A的编号相当于变量key的地址,可以通过变量key直接获得该内存单元的内容即密电码。现要求不能通过变量key直接对该变量所在存储单元进行访问,但变量key的存储地址存放在变量p中,则可以通过变量p取出变量key的存储地址,从而实现对变量key的间接访问,如图7.1所示。
(1)变量p用来保存变量key的存储地址,那么,如何在程序运行时获得变量key的存储地址?
(2)如何通过变量p实现对变量key的间接访问?
【算法】设变量key 和p分别表示保险箱A和B,算法如下:
step1: 将密电码存放在变量key中;
step2: 将变量key的存储地址存放在变量p中;
step3: 通过变量p获得变量key的值;
【任务7.1】获取密电码
指针的概念
可以通过变量名对变量所占存储单元进行访问(即存取操作),这种访问方式称为直接访问。
7.1 指针
指针的概念
7.1 指针
可以通过变量名对变量所占存储单元进行访问(即存取操作),这种访问方式称为直接访问。
指针的概念
保存地址的变量称为指针变量,在不致混淆的情况下,通常将指针变量简称为指针。
指针p指向变量num的存储示意图:
7.1 指针
指针的概念
通过指针对变量所在存储单元进行访问的方式称为间接访问。
p
100
num
100
sum
sum = *p ;
7.1 指针
指针的概念
通过指针对变量所在存储单元进行访问的方式称为间接访问。
对变量num的间接访问——存入操作
p
200
num
200
*p = 200 ;
前提:指针p已经指向变量num
指针就是地址
7.1 指针
指针变量的声明和初始化
【语法】声明指针变量的一般形式如下:
基类型 *指针变量名;
变量
指针变量
指向基类型的指针变量
【语义】声明一个指向基类型的指针变量。
指针定义符
7.1 指针
指针变量的声明和初始化
为什么要声明该指针指向变量的数据类型 ?
指针中存储的是起始地址,
不同基类型的指针指向的地址空间大小不同
7.1 指针
指针变量的声明和初始化
系统为变量 p 分配存储空间,由于尚未给指针变量 p 赋值,则指针变量p是“值无定义的”,可能指向内存中任何位置,这种指针称为野指针。野指针在程序中是很危险的,可能会引发系统崩溃。
7.1 指针
指针变量的声明和初始化
【语法】初始化指针变量的一般形式如下:
基类型 *指针变量名 = 内存地址 ;
【语义】定义一个指向基类型的指针变量,将内存地址存储在指针变量中,其结果是指针变量指向了该内存地址。
如何获得一个变量的内存地址 ?
变量的地址是由编译器分配的,C语言提供了取地址运算符“”获得变量的具体地址。
7.1 指针
指针变量的声明和初始化
初始化指针变量可以将变量的存储地址或是另一个已经定义的指针赋给该指针变量。
7.1 指针
指针变量的声明和初始化
指针变量的赋值
(1)将某个变量的地址赋给指针变量。
【语法】一般形式如下:
指针变量 = 变量地址 ;
(2)将一个指针赋给另一个指针
【语法】一般形式如下:
指针变量1 = 指针变量2 ;
7.1 指针
指针所指变量的间接访问
声明一个指针变量并与某个内存地址关联后,就可以使用间接引用运算符“*”对指针所指变量进行间接访问。
【语法】间接引用运算符“*”的一般形式如下:
*指针变量
7.1 指针
解决任务7.1的程序
2 #include stdio.h
3
4 int main( )
5 {
6 int key = 911, *p = NULL;
7 p = key;
8 printf(密电码所在保险箱的编号是:%X\n, p);
9 printf(密电码是:%d\n, *p);
10 return 0;
11 }
【任务7.2】鸡兔同笼问题(函数版)
【问题】鸡有2只脚,兔子有4只脚,假设笼子里共有M只头
文档评论(0)