C语言程序设计(09763)第七章
25页1、C语言程序设计,孙淑霞 罗奕 主编,第七章 指 针,7.1 指针和地址 计算机在设计时根据地址总线为内存的每个字节都赋予了一个编号,这个编号叫做内存的地址。 通过变量名来直接存取变量值的方式称为“直接存取”方式。 在C语言中还可以通过称之为“间接存取”的方式来存取变量。先定义一个变量p,假设编译系统给它分配的内存地址为1000,然后将另一变量a的地址2011存放到变量p中,访问变量a时,可以先从变量p的内存地址1000中读出a的地址2011,再到2011去访问变量a的值。这里,变量p相当于一个指示牌,它的内存中存放的2011指示了要访问的对象的地址,所以将表示变量a的地址的2011叫做“指针”,即内存地址就是指针,而存放变量a的地址(即指针)的变量p叫做“指针变量”。,7.2 指针变量的定义和引用,7.2.1 指针变量的定义 形式:类型名 *指针变量名; 指针变量赋地址通常有如下几种方式: 通过地址运算符“ 通过库函数获得内存地址。 给指针变量赋空地址,即将NULL值赋给指针变量,地址为NULL的指针变量称为空指针。,7.2.2 指针的引用,在程序中定义了指针变量并对其赋值后,就可以使
2、用指针了。例如: int x=10,*p= 表示将20存放到指针变量p所指的内存单元中,而p指向的是变量x,所以现在x的值变为20。,【例7.1】读程序,理解通过指针引用变量来进行运算。 #include void main() int a,b,c; int *pa,*pb; pa= ,程序运行实例如下: 10 a=10 b=11 a=50 b=13 c=50,7.3 指 针 运 算,指针运算是指对指针变量中的值进行的一种运算,其实是对指针变量中保存的内存地址进行运算,通过地址的变化来改变指针所指向的对象。 7.3.1 指针的移动 指针移动是指通过对指针变量重新赋值或对指针变量进行加上或减去一个数,使指针变量从当前位置指向一个新的存储单元。 针变量加上或减去一个数之后,指针变量的值如何变化和指针变量的基类型有关。 例如:一个int型的指针变量加1,其指针变量会从当前内存地址向地址增大的方向移动2个字节,而对一个double类型的指针进行减1运算,它将会从当前地址向地址减小的方向移动8个字节。,7.3.2 指针相减 指针相减是指对两个指针变量作减法运算,其结果是两个指针所指内存地址之间相
3、差的存储单元个数。指针相减一般用于变量占用连续存储空间(比如数组)的情形,在其他情况下无实际意义。 7.3.3 指针比较 对于指向连续内存区域的两个或多个指针,可以通过关系运算对它们进行比较,以确定哪个指针指向的变量地址在前,哪个在后。通常指向同一目标(如同一数组)的指针进行比较时才有意义。,7.4 指针与数组,7.4.1 指向一维数组的指针 定义了一个整型数组a和一个指向该数组的整型指针变量p: int a10, *p=a; 通过下面的语句可以访问数组a中的每个元素并为其赋值100: for(;p-a10;p+) *p=100; 然后可按下面方式访问并输出数组a中所有元素的值: int k; for(k=0;k10;k+) printf(“%d “,*(a+k);,上面的语句也可写成: int k; for(p=a,k=0;k10,k+) printf(“%d “,*(p+k); /*这句也可写成 printf(“%d “,pk);*/ 由此可见,数组元素ak可以用*(a+k)来引用,即表达式ak可以用*(a+k)来表示,而表达式*(p+k)也可用pk来表示。这里pk不是指数组p的第
4、k个元素。 通过指针引用一维数组元素,7.4.2 通过地址引用二维数组元素,二维数组a的每个元素的地址可以由&aij来表示,也可以通过每行的首地址来表示,如元素a12的地址&a12也可以用a1+2来表示,元素aij的地址也可以用ai+j来表示。实际上,对于上面定义的二维数组a的任一元素aij,其地址可用以下5种表达式来表示: &aij ai+j *(a+i)+j &a00+4*i+j a0+4*i+j,二维数组元素的引用也可用下面5种表达式来表示: aij *(ai+j) *(*(a+i)+j) *(&a00+4*i+j) (*(a+i)j 二维数组a中元素aij的5种不同地址表示法及5种不同元素引用方法,7.4.3 通过指针数组引用二维数组元素,例如:int *p3, a34; 根据运算符的优先级,这里定义的指针数组*p3中的的优先级高于*,因此p首先与结合构成p3,表明p为一个一维数组,再与*结合,说明该一维数组是一个由指针变量构成的数组,其类型为int。 如果有下面的赋值: p0=a0; p1=a1; p2=a2; 则p0、p1和p2分别指向二维 数组a的每行元素的起始地址,此时
《C语言程序设计(09763)第七章》由会员E****分享,可在线阅读,更多相关《C语言程序设计(09763)第七章》请在金锄头文库上搜索。
逍遥游复习 知识点整理
近现代法德关系史 高三展示课3稿
当代大学生人生信仰及追求的调查研究
长相思 纳兰性德-ppt课件
课件:危机意识 一
英语ppt演讲关于阿甘正传
发达国家基础教育改革的动向与趋势 修改版
中国民间美术 课件.ppt
生物质发电技术与系统 课程ppt 第1章 生物质发电技术现状及发展趋势 2学时 -----2016
现代信号处理思考题 含答案
执业药师继续教育 抑郁症的药物治疗 100分
小学生的成长档案模板不用修改 万能型
增订六版 现代汉语 上册 第二章文字 思考与练习答案
国家财政ppt课件
加拿大英语介绍
六年级统计图的选择课件
中学生成长档案ppt
中国现代文学史期末复习整理
lohi和hihilo训练对女子赛艇运动员运动能力影响的比较研究
风雨贾平凹阅读答案
2024-04-11 25页
2024-04-11 37页
2024-04-11 28页
2024-04-11 31页
2024-04-11 36页
2024-04-11 29页
2024-04-11 22页
2024-04-11 27页
2024-04-11 34页
2024-04-11 32页