- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]计算机本科C语言第十章讲稿
2004年11月1日 2004年11月1日 第十章 指针 10.1 指针的概念 1 地址 内存区的每个字节有一个编号,这就是“地址”。 内存 字节 地址 旅馆 房间 房间号 在地址所标志的单元中存放数据,相当于房间中住旅客一样。 凡在程序中定义的变量,在编译时,系统都给它们分配相应的存储单元。如,一般微机C系统给int 变量分配2字节,给float变量分配4字节。每个变量所占用的存储单元都有确定的地址。 例如: int a = 3 , b = 4; float c = 4.5 , d=8.6 ; char e = ‘w’ , f=‘y’ ; 它们在内存中的情况如右图所示: 变量的地址 变量的地址:是其所占存储单元第一个字节的编号,是用: 变量名 来表示。 由此可得: a 1010 b 1012 c 1014 d 1018 …… 要访问内存中的变量,在程序中通常通过变量名来引用变量的值。例如:printf(“%d”,a); 实际上,在编译时,在内存中不再出现变量,而只有地址a。系统找到其对应的地址1010,然后从1010和1011两个字节的整型存储单元中取出其值。 又例如:scanf(“%d”,b);将键盘输入的一个数存到1012开始的2个字节的整型存储单元中。 由于通过变量的地址能找到变量的存储单元,我们说地址“指向”该变量单元。 下图:a的地址为1010,即a的指针为1010,也就是1010指向a的存储单元。如同房间号1010指向1010房间。 4 直接访问方式 这种按变量地址存取变量值的方式,称为“直接存取”方式或称“直接访问”方式。 6 指针变量 存放地址的变量是一种特殊变量(地址变量或指针变量),它只能用来存放地址。根据上图所示的逻辑关系,可以把它们形象地表示为下图: 小结: 地址:内存中每个字节的编号 变量的地址:指着是变量所占存诸单元第一个字节的地址。 指针变量:其值为地址的变量 指向:是通过地址来体现,通过地址能找到所需的变量单元,可以说,地址指向该变量单元。 10 . 2 变量的指针和指向变量的指针变量 内容:指针变量的定义 指针变量的引用及作函数的参数 一、指针变量的定义 一般形式: 类型标识符 *变量名 如:int *p1; char *p2; float *p3; 说明:1) 当*出现在声明中,说明p1、 p2、 p3为指针变 量 (2) 指针变量有确定的指向的数据类型。 pa、pc等分别指向不同数据类型的指针变量,它们的共同点:1)值为地址,2)它们的存储单元空间是一样的。 一个指向char的指针和一个指向int的指针不同点: 其实,指针本身只有一种,指针变量存放的值都是内存地址。在定义指针时,定义指针所指向的数据类型的目的是说明如何解释指针所指向的空间的数据。 在定义指针变量时要注意: 1 一般形式:基类型 *指针变量名 2 不能用一个整数给一个指针变量赋初值 int *p=2000; 写此语句的原意可能是想将地址2000作为指针变量p的初值,但编译系统并不把2000认为是地址,而认为是整数,因此认为是语法错误。 3 在定义指针变量时必须指明基类型。 float *p;p++;说明p只能指向类型为实型的变量,且使指针移动1个位置意味着移动4个字节。 二、指针变量的引用 1 有两个与指针变量有关的运算符 取地址运算符 * 指针运算符(间接访问运算符) 例如:a为变量a的地址,*p为指针变量p所指向的存 储单元。 2 指针变量赋值运算 1)可以将一个变量的地址直接赋给同类型的指针变量 float score; float *pf=score; char ch; char *str=ch; int t,k; int *p1=t,*p2=k; 错误着是: p1=ch; pf=k; str=score; 2)同类型的指针变量之
原创力文档


文档评论(0)