收藏 分享(赏)

c语言程序设计第三版谭浩强第十章指针.ppt

上传人:精品资料 文档编号:11225128 上传时间:2020-02-21 格式:PPT 页数:110 大小:693.50KB
下载 相关 举报
c语言程序设计第三版谭浩强第十章指针.ppt_第1页
第1页 / 共110页
c语言程序设计第三版谭浩强第十章指针.ppt_第2页
第2页 / 共110页
c语言程序设计第三版谭浩强第十章指针.ppt_第3页
第3页 / 共110页
c语言程序设计第三版谭浩强第十章指针.ppt_第4页
第4页 / 共110页
c语言程序设计第三版谭浩强第十章指针.ppt_第5页
第5页 / 共110页
点击查看更多>>
资源描述

1、第十章10.1 地址和指针的概念为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的。 内存区的每一个字节有一个编号,这就是 “地址 ” 。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。 、按变量地址存取变量值的方式称为 “直接访问 ”方式 ( ,) ;( ,);例如:另一种存取变量值的方式称为 “间接访问 ”的方式。即,将变量的地址存放在另一个变量中。在语言中,指针是一种特殊的变量,它是存放地址的。 假设我们定义了一个指针变量 i_pointer用来存放整型变量的地址,它被分配地址为 (3010)、 (3011)的两个字节。可以通过语句

2、: i_pointer ;将的地址 (2000)存放到 i_pointer中。这时, i_pointer的值就是 (2000) ,即变量所占用单元的起始地址。要存取变量的值,可以采用间接方式:先找到存放 “的地址 ”的变量 i_pointer ,从中取出的地址 (2000),然后到 2000 、 200字节取出的值()。一个变量的地址称为该变量的 “指针 ”。例如,地址 2000是变量的指针。 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为 “指针变量 ”。上述的 i_pointer就是一个指针变量。指针和指针变量的定义:指针变量的值(即指针变量中存放的值)是地址(即指针)。请区

3、分 “指针 ”和 “指针变量 ”这两个概念。10.2 变量的指针和指向变量的指针变量10. .1 定义一个指针变量定义指针变量的一般形式为基类型 *指针变量名;下面都是合法的定义:float *pointer_; / pointer_是指向 float型变量的指针变量char *pointer_; /pointer_是指向字符型变量的指针变量可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。如:pointer_;pointer_;在定义指针变量时要注意两点:(1)指针变量前面的 “*”,表示该变量的类型为指针型变量。例 : float *pointer_1;(1)指针变

4、量名是 pointer_1 ,而不是 * pointer_1 。 (2) 在定义指针变量时必须指定基类型。需要特别注意的是,只有整型变量的地址才能放到指向整型变量的指针变量中。下面的赋值是错误的 float a; int * pointer_1; pointer_1= /* 将 float型变量的地址放到指向整型变量的指针变量中,错误 */10. . 指针变量的引用 请牢记,指针变量中只能存放地址(指针),不要将一个整数(或任何其他非地址类型的数据)赋给一个指针变量。 例 10. 通过指针变量访问整型变量#include void main ( ) int ,;int *pointer_, *

5、pointer_;pointer_; /*把变量的地址赋给 pointer_1 */ pointer_; /*把变量的地址赋给pointer_ */printf( %, % , ,);printf( %, % ,*pointer_ , *pointer_);对 “ ”和 “*”运算符说明:如果已执行了语句 pointer_;(1) * pointer_ 的含义是什么? “ ”和 “*”两个运算符的优先级别相同,但按自右而左方向结合,因此先进行 * pointer_ 的运算,它就是变量,再执行运算。因此, * pointer_ 与 相同,即变量 a的地址。如果有 pointer_2 * poin

6、ter_ ;它的作用是将(的地址)赋给 pointer_2 ,如果 pointer_2原来指向,经过重新赋值后它已不再指向了,而指向了。(2) *的含义是什么?先进行运算,得的地址,再进行 *运算。即所指向的变量,也就是变量a。 *和 *pointer_的作用是一样的,它们都等价于变量。即 *与等价。(3) ( *pointer_)相当于。注意括号是必要的,如果没有括号,就成为了 *pointer_,从附录可知: +和 *为同一优先级别,而结合方向为自右而左,因此它相当于 *(pointer_ )。由于 +在pointer_1的右侧,是 “后加 ”,因此先对 pointer_的原值进行 *运算

7、,得到的值,然后使 pointer_的值改变,这样 pointer_不再指向了。例 10 . 2 输入和两个整数,按先大后小的顺序输出和。#include void main() int * 1, * 2, *,;scanf( , ,); 1;if();printf( = , = , ,);printf( max= ,min= ,* 1,* 2); 运行情况如下:, ,当输入,时,由于,将和交换。交换前的情况见图(),交换后见图()。10. .3 指针变量作为函数参数例 10 . 3 对输入的两个整数按大小顺序输出 #include void main() void swap( int *,

8、int *) ;int ,;int *pointer_, *pointer_;scanf( , ,);pointer_ ; pointer_2 ;if( swap( pointer_ , pointer_2 );printf( , ,); void swap( int *, int *) int temp;temp * 1;* *;* temp;例 10. 输入、 3个整数,按大小顺序输出#include void main() void exchange( int * 1, int * 2, int * 3) ;int , *, *, *;scanf( %, %, % , if( * *)

9、swap(,);if( * *) swap(,);if( * * swap(,); void swap( int *, int *) int temp;temp *;* *;* temp; 10.3 数组与指针 一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓 数组元素的指针就是数组元素的地址 。 定义一个指向数组元素的指针变量的方法,与以前介绍的指向变量的指针变量相同。例如: ;(定义为包含个整型数据的数组 ) *; (定义为指向整型变量的指针变量 )应当

10、注意,如果数组为型,则指针变量的基类型亦应为型。 10.3.1 指向数组元素的指针对该指针变量赋值:;把元素的地址赋给指针变量。也就是使指向数组的第号元素,如图:10. .通过指针引用数组元素引用一个数组元素,可以用:() 下标法,如形式;() 指针法,如 *()或 *() 。其中是数组名,是指向数组元素的指针变量,其初值。例 10.5 输出数组中的全部元素 假设有一个数组,整型,有个元素。要输出各元素的值有三种方法: (1)下标法#include void main() int ;int ;for(;)scanf( ,);printf( );for(;)printf( ,);(2) 通过数组

11、名计算数组元素地址,找出元素的值。#include void main() int ;int ;for(; )scanf( ,);printf( );for(;)printf( , *();(3) 用指针变量指向数组元素。#include void main() int ;int *,;for(;)scanf( ,);printf( );for(;();)printf( , *);例 10. 通过指针变量输出数组的个元素。 有人编写出以下程序:#include void main() int *,;for(; )scanf( ,);printf( );for(;, )printf( , *);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报