高级语言程序设计 课件 郑岩 第7、8章 指针、 结构体类型和自定义类型.pptx

高级语言程序设计 课件 郑岩 第7、8章 指针、 结构体类型和自定义类型.pptx

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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];

您可能关注的文档

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档