中国地质大学C课件05.ppt
《中国地质大学C课件05.ppt》由会员分享,可在线阅读,更多相关《中国地质大学C课件05.ppt(37页珍藏版)》请在三一文库上搜索。
1、,第五章 指针和引用,指针是一种特殊的数据类型。 指针概念是C+语言中较难理解和较难掌握的概念之一。 本章介绍指针的概念、定义、运算等内容。,指针变量是一种特殊的变量,变量中存放的不是某种数据类型的数据,而是另一个变量或常量的地址。,5.1 指针概念,如有定义: int value=150; char ch=M; 并执行赋值语句: pv= /pv holds the address of value 由于pv中存放的是value变量的地址,pc中存放的是ch变量的地址,故称pv和pc为指针变量。简称为指针(Pointer)。,指针指向的对象称为目标或目标变量(常量)。如图7.1所示:,valu
2、e,ch,*pv,*pc,图1 内存空间,1000H,1050H,C+规定: 目标或目标变量可以用指针变量名前加上运算符“ * ”表示。 pv的目标变量value可表示为*pv, pc的目标变量ch可表示为*pc, 即 *pv和value等效 *pc和ch等效 而&pv和&pc表示针变量本身的地址,当指针变量为2个字节时, 最大访问地址为:,指针的定义 指针变量也必须先定义后使用 定义的一般格式: 类型定义符 *指针变量名; 其中:类型定义符指针指向对象的数据类型 “*”说明符,表示其后的标识符是指针变量,而不是 一般变量。,例如: int *ptr ; char *name ; float
3、*pf ; 其中,定义ptr,name,pf分别为指向整型、字符型和浮点型 数据的指针。 const int *ptr; / pointer to int const const char *cpc const float *point 其中,ptr,cpc,point为指向常量的指针。 注意: 指针变量可以与其他变量一起定义,如: int a, bb,*c; char *p, *q, ch; 指针变量也可定义为全局,静态和局部的指针。,例如: int num, *pn; char color , *pc; 执行语句 pn= 这里,“*”作为访问目标变量的运算符,在定义指针时, “*”作为说明
4、符。注意使用上的区别。,5.2 指针赋值,使用指针前,必须给已定义指针变量赋以指向目标变量的地址值。“&”操作符可获取变量的地址。,指针赋值的几种情况: 同种数据类型的指针变量之间可以相互赋值。 int a, *pa, *pb; pa= /正确,例:有关指针概念的程序 /ex5_3.cpp #include void main( ) int w, *p = ,结果: w=800 &w=0x0012FF7C *p=800 &p=0x0012FF78 p=0x0012FF7C,指针变量的地址 指针也是变量,指针变量的地址是指它本身的内存地址,如图1所示。,图示如下:,5.3 指针运算 指针运算实质
5、上是地址运算。 1、赋值运算 2、取地址运算“ 则 &(*ptr) 表示指针ptr *(&x) 表示变量x,图2,3、指针与整数的加减运算 在数组中,指针变量加上或减去一个整数n,表示: 指针由当前所指向的位置向前或向后移动n个数据元素的位置。 移动后的实际地址为: p n*sizeof(数据类型) 4、指针的关系运算 指向同种数据类型的指针可作关系运算,表示它们所存放的 地址之间的关系。 , = = , != 指针运算示例:课本P57例4.2,/ex5_2a.cpp #include void main( ) int a10, *p, *q; cout“a=“aendl; cout“a+1=
6、“a + 1endl; cout“a+2=“a + 2endl; p = ,cout“p=“pendl; cout“q=“qendl; p = ,例 /ex5_3.cpp #include void main( ) char *p1, *p2; p1 = “C Program“; p2 = p1 + 8; while (p2 = p1) cout*p2; p2-; coutendl; ,5.4 指针与数组,C+规定定义一个数组时,用数组名存放该数组在内存中的首地址。 当把数组名赋予一个指针变量后,该指针指向数组,可以通过指针移动方式访问数组元素。,例如: int a20, *p; p=a; 则
7、下标为i 的元素可表示为: ai, *(a+i), pi, *(p+i), 对应地址可表示为: &ai, a+i, &pi, p+i,注意: 数组名是指针常量,不是指针变量,不能给数组名赋值。,数组元素的表示方法示例,例如:下面程序是用指针方式访问数组元素,计算数组元素之和。 #include void main() int iarray10=0,2,4,6,8,10,12,14,16,18; int sum=0; int *iptr=iarray; /指针初始化 for(int i=0;i10;i+) sum+=*iptr; iptr+; cout“sum is “sumendl; ,运行结
8、果为: sum is 90,例如:对于前例中数组的求和元素运算,可以有以下五种方法: #include int sum1,sum2,sum3,sum4,sum5; int iarray=1,4,2,7,13,32,21,48,16,30; int *iptr; void main() int size,n; size=sizeof(iarray)/sizeof(*iarray); for(n=0;nsize;n+) /方法1 sum1+=iarrayn; ,iptr=iarray; /方法2 for(n=0;nsize;n+) sum2+=*iptr+; iptr=iarray; /方法3 f
9、or(n=0;nsize;n+) sum3+=*(iptr+n); iptr=iarray; /方法4 for(n=0;nsize;n+) sum4+=iptrn; ,for(n=0;nsize;n+) /方法5 sum5+=*(iarray+n); coutsum1endl; coutsum2endl; coutsum3endl; coutsum4endl; coutsum5endl; ,答案为: 174 174 174 174 174,一、字符数组 数组中每个元素为字符的数组称为字符数组,字符数组可用单个字符常量初始化,也可用字符串常量初始化,例如: char buffer=“hello”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国地质大学 课件 05
链接地址:https://www.31doc.com/p-2080254.html