p2 &b a)
b *p2 4
p2 &a b)
b p1 4
图6-5 修改后的程序在运行中指针与变量之间的关系
当指针交换指向后, p 1和p 2由原来指向的变量 a和b改变为指向变量 b和a,这样一来, * p 1 就表示变量b,而* p 2就表示变量a.在上述程序中,无论在何时,只要指针与所指向的变量满 足p=&a;我们就可以对变量 a 以指针的形式来表示.此时 p等效于&a,*p等效于变量 a . 6.3.2 指针变量作函数的参数 函数的参数可以是我们在前面学过的简单数据类型,也可以是指针类型.使用指针类型 做函数的参数,实际向函数传递的是变量的地址.由于子程序中获得了所传递变量的地址, 在该地址空间的数据当子程序调用结束后被物理地保留下来. [例6-4] 利用指针变量作为函数的参数,用子程序的方法再次实现上述功能.
main() { void chang(); /* 函数声明*/ int *p1,*p2,a,b,*t; scanf("%d,%d",&a,&b); p1=&a; p2=&b; chang(p1,p2); /*子程序调用*/ printf("%d,%d\n",*p1,*p2);
96
C语言程序设计
下载
return 0; } void chang(int *pt1,int *pt2) { /* 子程序实现将两数值调整为由大到小 */ int t; if (*pt1<*pt2) /* 交换内存变量的值 */ { t=*pt1; *pt1=*pt2; *pt2=t;} return; }
由于在调用子程序时,实际参数是指针变量,形式参数也是指针变量,实参与形参相结 合,传值调用将指针变量传递给形式参数 pt1和pt2.但此时传值传递的是变量地址,使得在子 程序中pt1和pt2具有了p1和p2的值,指向了与调用程序相同的内存变量,并对其在内存存放的 数据进行了交换,其效果与 [例6-2]相同. 思考下面的程序,是否也能达到相同的效果呢
main() { void chang(); int *p1,*p2,a,b,*t; scanf("%d,%d",&a,&b); p1=&a; p2=&b; chang(p1,p2); printf("%d,%d\n",*p1,*p2); } void chang(int *pt1,int *pt2) { int *t; if (*pt1<*pt2) { t=pt1; pt1=pt2; pt2=t; } return; }
程序运行结束,并未达到预期的结果,输出与输入完全相同.其原因是对子程序来说, 函数内部进行指针相互交换指向,而在内存存放的数据并未移动,子程序调用结束后, main()函数中p1和p2保持原指向,结果与输入相同.
6.4 指针与数组
变量在内存存放是有地址的,数组在内存存放也同样具有地址.对数组来说,数组名就 是数组在内存安放的首地址.指针变量是用于存放变量的地址,可以指向变量,当然也可存 放数组的首址或数组元素的地址,这就是说,指针变量可以指向数组或数组元素,对数组而 言,数组和数组元素的引用,也同样可以使用指针变量.下面就分别介绍指针与不同类型的 数组.
下载
6.4.1 指针与一维数组
第6章 指
针
97
假设我们定义一个一维数组,该数组在内存会有系统分配的一个存储空间,其数组的名 字就是数组在内存的首地址.若再定义一个指针变量,并将数组的首址传给指针变量,则该 指针就指向了这个一维数组.我们说数组名是数组的首地址,也就是数组的指针.而定义的 指针变量就是指向该数组的指针变量.对一维数组的引用,既可以用传统的数组元素的下标 法,也可使用指针的表示方法. int a[10] , *ptr; /* 定义数组与指针变量 */ 做赋值操作:ptr=a; 或 ptr=&a[0]; 则ptr就得到了数组的首址.其中, a是数组的首地址, &a[0]是数组元素 a[0]的地址,由于 a [ 0 ]的地址就是数组的首地址,所以,两条赋值操作效果完全相同.指针变量 p t r就是指向数 组a的指针变量. 若ptr指向了一维数组,现在看一下 C规定指针对数组的表示方法: 1) ptr+n与a + n表示数组元素 a [ n ]的地址,即&a[n] .对整个 a数组来说,共有 1 0个元素, n 的取值为 0~9,则数组元素的地址就可以表示为 p t r + 0~p t r + 9或a + 0~a + 9,与&a[0] ~& a [ 9 ] 保持一致. 2) 知道了数组元素的地址表示方法, * ( p t r + n )和* ( a + n)就表示为数组的各元素即等效于 a[n]. 3) 指向数组的指针变量也可用数组的下标形式表示为 ptr[n],其效果相当于 *(ptr+n). [例6-5] /*以下标法输入输出数组各元素. 下面从键盘输入 10个数,以数组的不同引用形式输出数组各元素的值.
- c语言指针难 > 指针是C语言的精华部分
-
指针是C语言的精华部分
下载该文档 文档格式:PDF 更新时间:2000-12-07 下载次数:0 点击次数:4文档基本属性 文档语言: 文档格式: PDF 文档作者: 123 关键词: 主题: 备注: 点击这里显示更多文档属性 经理: 单位: 分类: 创建时间: 上次保存者: 修订次数: 编辑时间: 文档创建者: 修订: 加密标识: 幻灯片: 段落数: 字节数: 备注: 演示格式: 上次保存时间:
- 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
- PDF格式下载
- 更多文档...
-
上一篇:指针是C语言的精华部分
下一篇:指针是C语言的精华部分
点击查看更多关于c语言指针难的相关文档
- 您可能感兴趣的
- c语言指针 c语言指针视频教程 c语言指针函数编程题 c语言数组与指针 c语言指针的用法 c语言指针视频 c语言答案指针 c语言指针讲解 c语言指针教程
- 大家在找
-
- · 8路数字抢答器论文
- · 可燃气体监控系统的用途
- · 尼坤爱宋茜
- · 杰威尔音乐公司官网
- · 山西三线房价走势2012
- · www.zhidao.baidu.com
- · 内蒙古地质类招聘
- · cad仿真软件
- · 西门子变频器说明书
- · 火影忍者长门vs
- · 第四军医大研究生
- · 白城市贴吧
- · 删繁就简三秋树
- · 360左旋肉碱咖啡
- · 五金手册pdf
- · 农产品加工与贮藏课件
- · 万能声卡驱动软件下载
- · 飞驰的近义词
- · 心理学自考
- · 浙江省职业资格证书
- · 第二教育网初中物理
- · 法学ppt背景
- · 工程竣工财务决算报告
- · 高等数学一微积分下载
- · 常熟市劳动局
- · 外发加工打火机
- · 长沙艺星整形美容医院
- · 超级黄金眼
- · 大棚自动化系统论文
- · 水泵机械密封件
- 赞助商链接