指针是C语言的重要概念

上传人:豆浆 文档编号:49004127 上传时间:2018-07-22 格式:PPT 页数:45 大小:78KB
返回 下载 相关 举报
指针是C语言的重要概念_第1页
第1页 / 共45页
指针是C语言的重要概念_第2页
第2页 / 共45页
指针是C语言的重要概念_第3页
第3页 / 共45页
指针是C语言的重要概念_第4页
第4页 / 共45页
指针是C语言的重要概念_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《指针是C语言的重要概念》由会员分享,可在线阅读,更多相关《指针是C语言的重要概念(45页珍藏版)》请在金锄头文库上搜索。

1、第十章 指针 指针是C语言的重要概念,是C语言的特 色,是C语言的精华。 10.1 地址和指针的概念 内存中的每一个字节都有一个地址。 内存单元的地址与内存单元的内容是两 个完全不同的概念。 在编译时给出了变量名和地址的对应关 系。 以前在程序中定义整形等变量。如 int a,b; 表示a和b申请整形单元,分别存放两个 整形值。 我们也可以定义一种特殊的变量,它用 来存放内存单元地址。这种变量的值是 一个地址,它的作用是:根据地址去找 相应的单元,因此,这种装载地址的变 量又可称为“指针变量”。 指针变量的值就是指针即地址。 10.2 变量的指针和指向变量的指针变量 变量的指针就是变量的地址。

2、存放地址 的变量称谓指针变量。 为了表示指针变量和它所指向的变量之 间联系,程序中用*符号表示“指向” 如用i_point表示指针变量,而*i_point就 表示i_point指向的变量。 10.2.1 定义一个指针变量 C语言规定所有变量在使用前必须定义, 指定其类型,并按此分配内存单元。 int i,j; int *point1,*point2; 定义了两个指向整形变量的指针变量。 定义指针变量要指定“基类型” 基类型是指针变量指向的变量的类型。 指针变量的定义形式: 基类型 *指针变量名 那么如何给指针变量赋值呢? point1= point1= 10.2.2 指针变量的引用 指针变量只

3、能存放地址(指针),有两个有 关的运算符: (1)int *point1,*point2; a=100;b=20; point1= point2= printf(“%d,%dn”,a,b); printf(“%d,%dn”, *point1,*point2); point1= ? b=* ? main() int *p1,*p2,*p,a,b; a=10;b=90; p1= p2= if(am1)m1=*p;else if(*pxk)k=j; if(k!=i)t=xi;xi=xk;xk=t; 10.3.4 指向多维数组的指针和指针变量 1、多维数组的地址 考查:int a34; a是一个数组名

4、。 a数组包含3行,即看 成3个元素: a0、a1、a2。而一个元 素又是一个一维数组,包含4个元素。 a0所代表的一维数组包含的4个元素是 : a00、a01、a02、a03 从二维数组来看, a代表整个二维数组的首地址, 也就是第0行的首地址,即a0地址 a+1代表第1行的首地址,即a1地址 a+2代表第2行的首地址,即a2地址 实际上a0、 a1和 a2分别表示的是二 维的第0行、第1行和第2行。 基于这种认识,把a0、 a1和 a2看成 是一维数组名,C语言又规定数组名代表 数组的首地址,因此a0代表第0行一维 数组中第0列元素的地址,即 int *p; for(p=a0;py?x:y

5、; return(z); 将main函数改写为: main() int max(int,int); int (*p)(); int a,b,c; p=max; /将max的入口地址赋给p scanf(“%d,%d”, c=(*p)(a,b); printf(“Max is %d”,c); int (*p)()定义p是一个指向函数的指针变 量,此函数带回整型的返回值. 定义指向函数的指针变量的一般形式 数据类型 (*指针变量)( ); 其它注意事项见教材 10.5.2 用指向函数的指针作函数参数 函数的参数可以是变量,指向变量的指针 变量,数组名,指向数组的指针变量,等等 函数指针变量常用的用途

6、之一是把指针 作为参数传递到其他函数,是C语言中深 入的部分. sub(int (*x1)(int),int (*x2)(int,int) int a,b,i=1,j=2; a=(*x1)(i); b=(*x2)(i,j); .10.6 返回指针值的函数 一个函数可以带回一个整型值,字符值,实 型值等,也可带回指针型的数据,即地址. 其本质与以前类似,只是带回的值是指针 类型而已 带回指针值的函数,可定义为: 基类型 *函数名(参数表); 如: int *a(int x,int y); main() float score4=60,70,80,90,50,89,67,88, 34,78,90,

7、66,*p; float *search(float (*ptr)4); int i,j; for(i=0;i3;i+) p=search(score+i); if(p=*(score+i) printf(“No. %d scores:”,i); for(j=0;j4;j+)printf(“%5.2f”,*(p+j); printf(“n”); float *search(float (*ptr)4) int i; float *pt; pt=*(ptr+1); for(i=0;i4;i+) if(*(*ptr+i)60) pt=*ptr; break; return(pt); 10.7 指针

8、数组和指向指针的指针 10.7.1 指针数组的概念 一个数组其元素均为指针类型数据,称为 指针数组.指针数组中的每一个元素都相 当于指针变量.一维指针数组的定义为: 类型名 *数组名数组长度 主要用于指向若干个字符串,使字符串的 处理更加灵活,如: char *name =“Tom”,”Bill”,”David”; 10.7.2 指向指针的指针 指针数组的数组名就是一个指针的指针. char *p; 相当于 char *(*p); 指针p是指向一个字符指针变量的变量. *p就是p指向的另一个指针变量 变量的直接访问,间接访问(单级间址,二 级间址,多级间址). 10.7.3 指针数组作main

9、函数的形参 指针数组的一个重要作用就是作main函 数的形参. main函数的一般形式为: main( ) 实际上main函数可以有形参,如 main(argc,argv) main函数是系统调用的,它的形参对应的 实参从何而来呢? 从OS命令中得到: 命令名 参数1 参数2参数n 利用指针数组作main函数的形参,可以向 程序传送命令行参数(这些参数是字符串 ).由于参数的长度和个数都是不定的,所 以用指针数组恰好能满足这一要求.10.8 有关指针的数据类型和指 针运算的小结 10.8.1 有关指针的数据类型的小结int i; int *p;int an; int *pn;int (*p)n

10、;int f( ) int *p( )int (*p)( )int *p; 10.8.2 指针运算小结 (1)指针变量加(减)一个整数 如:p+,p-i等 (2)指针变量赋值p=p=array;p=p=max;p1=p2; (3)指针变量赋空值,表示不指向任何变量 p=NULL; (4)两个指针变量可以相减指向同一数组的两个不同元素的指针相 减是什么意义,而相加呢? (5)两个指针变量可以比较 10.8.3 void指针类型 ANSI增加 void指针类型,可定义一个指针变量,但不 指定它是指向哪一种类型数据的,将它的 值赋给另一指针变量时要进行强制类型 转换. char *p1; void *p2; p1=(char *)p2; 总结 指针变量的优点: 1.提高程序效率 2.可以实现函数改变多个值 3.可以实现灵活的和动态的存贮分配 缺点: 难理解,灵活难以把握,容易出错 作业: 10.2 10.3 10.9 10.13

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号