[其它]四川大学c程序课件第8章.ppt
《[其它]四川大学c程序课件第8章.ppt》由会员分享,可在线阅读,更多相关《[其它]四川大学c程序课件第8章.ppt(39页珍藏版)》请在三一办公上搜索。
1、第8章指针,Company Logo,主要内容,8.2 指针变量的定义,计算机基础 教学实验中心,Company Logo,8.1指针概述及定义,计算机基础 教学实验中心,Company Logo,8.2 指针变量的定义,对指针变量的定义包括三个内容:(1)指针类型说明,即定义变量为一个指针变量;(2)指针变量名;(3)变量值(指针)所指向的变量的数据类型。其一般形式为:类型说明符*变量名;这里的*并不是乘法运算符,而表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示该指针变量所指向的变量的数据类型。,计算机基础 教学实验中心,Company Logo,8.3 指针变量的引用,计
2、算机基础 教学实验中心,指针变量的引用即使用,使用之前必须赋予确定的值。若使用未经赋值的指针变量将造成系统混乱,甚至导致系统崩溃。,Company Logo,计算机基础 教学实验中心,&取地址运算符形式:&变量名&是单目运算符,其结合性为自右至左,优先级仅低于括号等一级优先的运算符。,8.3 指针变量的引用,Company Logo,指针定义注意事项,计算机基础 教学实验中心,1、在初始化时,必须先定义变量x,再将该变量的地址用取地址运算符赋给指针变量p,而不能颠倒其先后顺序,如以下定义便是错误的:int*p=被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。,Compan
3、y Logo,指针定义例子,计算机基础 教学实验中心,例8.1 指出以下语句中的错误(0)#define M 99(1)float x,y,*pf;(2)char c,*pc;(3)int a10,*pi1,*pi2;(4)pf=(10)pf=&(x+y),Company Logo,*指针运算符,计算机基础 教学实验中心,取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量 例main()char c,*poniter=/*语句5*/该程序运行的结果为:bb,Company Logo,指针举例,计算机基础 教学实验中心,例8.3mai
4、n()int a,b,c,d,*p1,*p2;/*语句1*/p1=/*语句7*/,Company Logo,指针举例,计算机基础 教学实验中心,例 8.4 以下程序运行后,x,y,z的值各为多少?main()(1)int x,y,z,l=4,m=6,n=8;(2)int*p1=该程序的运行结果是:x=1y=9z=24,Company Logo,8.4 指针作为函数参数,计算机基础 教学实验中心,函数参数的类型,可是整型、实型、字符型等基本类型,也可以是指针类型 例85#inchlude main()int*p,*q;int m=58;int n=99;void change1();void c
5、hange2();void change3();p=m:q=n;*比较附试change1函数前后m,n的值*printf(“n调用change1函数之前:m=d n=%d”,m,n);changel(m,n);printf(“n调用change1函数之后:m=d n=%d”,m,n);*比较调试change2函数前后m,n的值*printf(“n调用change2函数之前:m=d n=%d”,m,n);,Company Logo,例85(continue),change2(mn);printf(“n调用change2函数之后:m=d n=%d”,m,n);*比较调试change3函数前后m,n
6、的值*printf(“m调用change3函数之前:m=d n=%d”,m,n);change3(p,q);printf(“n调用ehg3函数之后:m=d n=%d”,m,n);Void changel(int m,int n)m=1n=1printf(“n在函数change1中:m=%d n=%d”,m,n);,计算机基础 教学实验中心,Void change2(int*pm,int*pn)*pm=1;*pn=l:printf(“n在函数change2中:*pm=%d*pn=%d”,*pm,*pn);Void change3(int*pm,int*pn)int i;int j;i=2;j=2
7、;pm=,Company Logo,上面这段程序包含三个函数运行情况如下:调用change1函数之前:m=58 n=99 在函数change1中:m=1 n=1 调用change1函数之后:m:58 n=99 调用change2函数之前:m=58 n=99 在函数change2中:*pm=1*pn=1 调用change2函数之后:m=1 n=1 调用ck3函数之前:m=1 n=1 在函数change3中:*pm=2*pn=2 调用change3函数之后:m=1 n=1,计算机基础 教学实验中心,Company Logo,8.5指针数组,计算机基础 教学实验中心,8.5.1指向数组元素的指针变量
8、指向数组的指针变量的定义形式:int x100,y;int*p;整型变量y,整型数组x,指向整型的指针变量p。指针变量p并没有指向任何变量,它既可以指向整型的变量,如y,也可指向整型的数组x,这取决于把哪个变量的地址赋给p让p指向数组x可以写为:p=x;或p=x0;,Company Logo,8.5.2利用指针访问数组元素,当指针变量指向某个数组,在访问数组时就有两种方式:下标法和指针法。如:int*p,m20;p=m;指针法访问数组是用指向数组的指针变量加上某个数组元素的序号,得到该数组元素的地址后作指针运算*,即可表示该数组元素,如p+i为mi的地址,而*(p+i)就代表mi。指向数组的指
9、针变量也可带下标,如pi,即pi*(p+1)mi*(m+i),代表等价。,计算机基础 教学实验中心,Company Logo,例8.6用指针法和下标法访问数组,#include main()static int m10=0,1,2,3,4,5,6,7,8,9;int i;int*p;p=m;for(i=0;i=9;i+)printf(ni=%d,mi=%d,*(m+i)=%d,pi=%d,*(p+i)=%d,i,mi,*(m+i),pi,*(p+i);printf(,计算机基础 教学实验中心,Company Logo,8.5.4数组名及指向数组的指针变量作函数参数,在函数中,数组名可以作函数的
10、参数 当数组名作函数的参数时,由于数组名代表该数组的首地址即在调用函数时,将该数组的首地址传给形参,形参和实参共同指向一段内存,形参并未开辟新的存储单元,计算机基础 教学实验中心,Company Logo,例 二分查找算法,用binary search(二分查找算法)从一个已排好序的数列中查找一个数,判定此数是否属于该数列。int b_search(m,num,key)int m,num,key;int l,h,mid;l=0;h=num-1;while(lmmid)l=mid+1;else return(mid);return(-1);,计算机基础 教学实验中心,Company Logo,例
11、二分查找算法,main()static int b=10,12,13,14,25,34,72,88,100;int k,i,j;printf(The arranged array is:n);for(i=0;i9;i+)printf(%d,bi);printf(n);printf(Please input the key number which is to be searched:n);scanf(%d,计算机基础 教学实验中心,Company Logo,8.5.4数组名及指向数组的指针变量作函数参数,计算机基础 教学实验中心,对这个程序可以作一些改动,将bin_search函数中的形参m用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 其它 四川大学 程序 课件

链接地址:https://www.31ppt.com/p-5616134.html