- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第7章指针;;本章内容导读;地址:一个变量名代表内存中的一个存储单元,每个存储单元都有一个编号,即“地址”。;例如intmain(void)
{intnum;
scanf(%d,num);
printf(num=%d\n,num);
}
C编译程序编译到变量定义语句时,将变量num登录到“符号表”中。符号表的关键属性有两个:一是“标识符名(id)”,二是该标识符在内存空间中的“地址(addr)”。
为描述方便,假设系统分配给变量num的2字节存储单元为3000和3001,则起始地址3000就是变量num在内存中的地址。
变量值的存取──通过变量在内存中的地址进行
系统执行scanf(%d,num);和printf(num=%d\n,num);时,存取变量num值的方式有两种:;直接访问──直接利用变量的地址进行存取
(1)上例中scanf(%d,num);的执行过程:用变量名num作为索引值,检索符号表,找到变量num的起始地址3000;然后将键盘输入的值(假设为3)送到内存单元3000和3001中。此时,变量num在内存中的地址和值。
(2)printf(num=%d\n,num);的执行过程与scanf相似.首先找到变量num的起始地址3000,然后从3000和3001中取出其值,最后将它输出。
间接访问──通过另一变量访问该变量的值
;例如,假设定义了一个指针变量num_pointer,它被分配到4000、4001单元,其值可通过赋值语句num_pointer=#得到。此时,指针变量num_pointer的值就是变量num在内存中的起始地址3000。
通过指针变量num_pointer存取变量num值的过程:首先找到指针变量num_pointer的地址(4000),取出其值3000(正好是变量num的起始地址);然后从3000、3001中取出变量num的值(3)。
比较
两种访问方式之间的关系,可以用某人甲(系统)要找某人乙(变量)类比。
一种情况是,甲知道乙在何处,直接去找就是(即直接访问)。
另一种情况是,甲不知道乙在哪,但丙(指针变量)知道,此时甲可以这么做:先找丙,从丙处获得乙的去向,然后再找乙(即间接访问)。;例inti;
int*p=i;;说明
(1)“*”表示定义一个指针变量。指针变量的前面必须有“*”号。
(2)在定义指针变量的同时也可以定义普通变量或数组等。
(3)“数据类型符”是指针变量所指向变量的数据类型,可以是任何基本数据类型,也可以是其它数据类型。这个数据类型符不是指针变量中存放的数据类型,而是指针变量所指向的变量或数组的数据类型。
(4)“初始地址值”通常是变量名、数组元素或一维数组名,这里的变量或数组必须是已经定义过的。
(5)在定义指针变量时,可以只给部分指针变量赋初值。
(6)指针变量的初始化,除了可以是已定义变量的地址,也可以是已初始化的同类型的指针变量,也可以是NULL(空指针)。
(7)指针变量初始化时,指针变量的“数据类型符”必须与其“初始地址值”是同一类型。;;内存地址──内存中存储单元的编号
(1)计算机系统的内存中,拥有大量的存储单元(容量为1字节)。为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有一个惟一的地址。
(2)在地址所标识的存储单元中存放数据。
注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。
变量地址──系统分配给变量的内存单元的起始地址;给指针变量赋值
格式:指针变量=地址型表达式;取地址运算符:取变量的地址,单目运算符、右结合性。
;输出结果:x=6,y=9MAX=9,MIN=6;指针变量指向一维数组的方式
在数据定义语句中用赋初值的方式*指针变量=数组名;
在程序中用赋值的方式指针变量=数组名;
将指针变量指向一维数组元素的方式
在数据定义语句中用赋初值的方式*指针变量=数组名[下标];
在程序中用赋值的方式指针变量=数组名[下标];
当指针变量指向一维数组时,引用下标为i的一维数组元素的方法
*(指针变量+i)
*(数组名+i)
指针变量[i]
数组名[i];数组元素的四种表示方法;例inta[10],*p;
p=a;//?p=a[0];
或int*p=a[0];
或
您可能关注的文档
- 高级语言程序设计 课件 郑岩 第9、10章 编译预处理、文件.ppt
- 高级语言程序设计 课件 郑岩 第3、4章 数据类型、运算符和表达式; 结构化程序设计.ppt
- 高级语言程序设计 课件 郑岩 第1、2章 概述、 C语言概述.ppt
- 高级语言程序设计 课件 郑岩 第5、6章 数组、函数.ppt
- 统编版(部编版)语文二年级上册《狐假虎威》教学设计.docx
- 北师大版小学数学三年级上册《时间表》教学设计.docx
- 北师大版小学数学三年级上册《文具店》教学设计.docx
- 北师大版小学数学三年级上册《能通过吗》教学设计.docx
- 统编版(部编版)语文二年级上册《刘胡兰》教学设计.docx
- 北师大版小学数学三年级上册《需要多少钱》教学设计.docx
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
文档评论(0)