第八章指针课件.ppt

上传人:春哥&#****71; 文档编号:12723483 上传时间:2022-04-25 格式:PPT 页数:58 大小:152KB
返回 下载 相关 举报
第八章指针课件.ppt_第1页
第1页 / 共58页
第八章指针课件.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《第八章指针课件.ppt》由会员分享,可在线阅读,更多相关《第八章指针课件.ppt(58页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言程序设计语言程序设计1第八章第八章-指针指针C语言程序设计语言程序设计2 1 1、指向变量的指针、指向变量的指针 2 2、指向数组的指针、指向数组的指针 3 3、指向字符串的指针、指向字符串的指针 4 4、指向函数的指针、指向函数的指针6 6、二维指针、二维指针 7 7、返回指针值的函数、返回指针值的函数 5 5、指针数组、指针数组主要内容主要内容C语言程序设计语言程序设计3 地址和指针的概念地址和指针的概念 在计算机中,所有的数据都是存放在存储器中。一般把在计算机中,所有的数据都是存放在存储器中。一般把存储器中的一个字节称为一个内存单元存储器中的一个字节称为一个内存单元, 不同的数据类

2、型所不同的数据类型所占用的内存单元数不等占用的内存单元数不等. 为了正确地访问这些内存单元,为了正确地访问这些内存单元, 必须为每个内存单必须为每个内存单元编号。元编号。 根据一个内存单元的编号即可准确地找到该内存单根据一个内存单元的编号即可准确地找到该内存单元。元。内存单元的编号也叫做地址。内存单元的编号也叫做地址。 通常也把这个通常也把这个地址称为指地址称为指针。针。 1、地址:内存单元的编号,通常一个字节(、地址:内存单元的编号,通常一个字节(1B)一个编号。一个编号。 2、指针:内存单元的地址。、指针:内存单元的地址。C语言程序设计语言程序设计43、内存单元的指针和内存单元的内容、内存

3、单元的指针和内存单元的内容4、内存数据的访问方式:、内存数据的访问方式: (1)直接访问)直接访问按变量名存取变量按变量名存取变量 (2)间接访问)间接访问将变量的地址存放在另一个变量(指针将变量的地址存放在另一个变量(指针变量),通过指针变量来访问。变量),通过指针变量来访问。.30 50 60变量i变量j变量k2000200420022000指针变量 ip 在语言中,在语言中, 允许用一个变量来允许用一个变量来存放指针,这种变存放指针,这种变量称为量称为指针变量指针变量。一个指针变量的值一个指针变量的值就是某个内存单元就是某个内存单元的地址或称为某内的地址或称为某内存单元的指针。存单元的指

4、针。 地址地址C语言程序设计语言程序设计5 注意:注意:严格地说,一个指针是一个地址,严格地说,一个指针是一个地址, 是一个常量。是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。而一个指针变量却可以被赋予不同的指针值,是变量。 但经但经常把指针变量简称为指针。为了避免混淆,我们中约定:常把指针变量简称为指针。为了避免混淆,我们中约定:“指针指针”是指地址,是指地址, 是常量,是常量,“指针变量指针变量”是指取值为地址是指取值为地址的变量的变量。 定义指针变量的目的是为了通过指针去访问内存单定义指针变量的目的是为了通过指针去访问内存单元。元。C语言程序设计语言程序设计6指向变量的指针

5、变量变量的指针变量的指针变量的地址变量的地址例:例:&a 为变量为变量a在内存单元的存放地址,也称变量在内存单元的存放地址,也称变量a的指针的指针指针变量指针变量存放地址的变量存放地址的变量 int *p;指向变量的指针变量指向变量的指针变量一个指针变量存放变量一个指针变量存放变量a的地址,的地址, 则称该指针变量为则称该指针变量为指向指向变量变量a的的 指针变量。指针变量。 P=&a;C语言程序设计语言程序设计7指针变量的定义:指针变量的定义: 其一般形式为:其一般形式为: 类型说明符类型说明符 *变量名;变量名; *表示这是一个指针变量,变量名即指针变量名,类型表示这是一个指针变量,变量名

6、即指针变量名,类型说明符表示指针变量所指向的变量的数据类型。说明符表示指针变量所指向的变量的数据类型。注意,一个指针变量只能指向注意,一个指针变量只能指向同类型同类型的变量的变量指针变量的赋值指针变量的赋值 指针变量的赋值只能赋予地址,指针变量的赋值只能赋予地址, 否则将引起错误。否则将引起错误。 其一般形式为:其一般形式为: & 变量名;变量名; C语言程序设计语言程序设计81、把一个变量的地址赋予指向相同数据类型的指针变量。把一个变量的地址赋予指向相同数据类型的指针变量。例如:例如: int a,*pa pa=&a; /*把整型变量把整型变量a的地址赋予整型指针变量的地址赋予整型指针变量p

7、a*/2、把一个指针变量的值赋予指向相同类型变量的另一个指把一个指针变量的值赋予指向相同类型变量的另一个指针变量。针变量。如:如: int a,*pa=&a,*pb; pb=pa;指针变量的赋值运算指针变量的赋值运算C语言程序设计语言程序设计93、把数组的首地址赋予指向数组的指针变量。把数组的首地址赋予指向数组的指针变量。例如:例如: int a5,*pa; pa=a; 也可写为:也可写为: pa=&a0; 4、把字符串的首地址赋予指向字符类型的指针变量。把字符串的首地址赋予指向字符类型的指针变量。 例如:例如: char *pc; pc=C language;或用初始化赋值的方法写为:或用初

8、始化赋值的方法写为: char *pc=C Language; 这里应说明的是并不是把整个字符串装入指针变量,这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。而是把存放该字符串的字符数组的首地址装入指针变量。C语言程序设计语言程序设计10nint *p;n定义了一个指针变量定义了一个指针变量p,该变量的值为一个指该变量的值为一个指向整型变量的地址(指针)向整型变量的地址(指针)np=&a;nP的值为变量的值为变量a的地址,称的地址,称p指向指向an*pn间接访问间接访问p指向的变量指向的变量a的内容的内容n 取地址运算符取地址运算符 & 取内容

9、运算符取内容运算符 *总结总结C语言程序设计语言程序设计11注意:注意:指针运算符指针运算符*和指针变量说明中的指针说明符和指针变量说明中的指针说明符* 不是一回事。不是一回事。在指针变量说明中,在指针变量说明中,“*”是类型说明是类型说明符,表示其后的变量是指针类型。符,表示其后的变量是指针类型。而表达式中出现的而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。则是一个运算符用以表示指针变量所指的变量。C语言程序设计语言程序设计12l&*p即即&a与与p等价等价l*&a即即*p与与a等价等价l*p+即即*(p+),即先取值后指向下一个存储单元即先取值后指向下一个存储单元l *+

10、p即即*(+p) 即先指向下一个存储单元后取值即先指向下一个存储单元后取值l(*p)+ 表示表示p当前所指向的元素加当前所指向的元素加1 C语言程序设计语言程序设计13n为通过函数调用得到为通过函数调用得到n个要改变的值,可以:个要改变的值,可以:n使用使用n个全局变量个全局变量n使用使用n个指针参数间接改变其所指向变量的值个指针参数间接改变其所指向变量的值C语言程序设计语言程序设计14例例 写一交换两个变量值的函数写一交换两个变量值的函数sawp() void sawp(int *x, int *y) int temp; temp=*x; *x=*y; *y=temp; main() int

11、 a,b,*p,*p1=&a,*p2=&b; scanf(%d%d,p,p2); printf(na=%d, b=%dnn, a,b); sawp(p1,p2); printf(na=%d, b=%dnn, a,b);C语言程序设计语言程序设计155a&ap1p29b&b5a&ap1x&a9b&bp2y&b9a&ap1x&a5b&bp2y&b9a&ap1p25b&b程序的执行过程程序的执行过程调用前调用前调用时调用时在函数在函数sawp()中中调用结束后调用结束后C语言程序设计语言程序设计16指向一维数组的指针变量指向一维数组的指针变量一个指针变量可指向一个数组,也可指向一个数组元素。一个指针

12、变量可指向一个数组,也可指向一个数组元素。 可把数组名或第一个元素的地址赋予它,如要使指针变量指可把数组名或第一个元素的地址赋予它,如要使指针变量指向第向第i号元素可把号元素可把i元素的首地址赋予它或把数组名加元素的首地址赋予它或把数组名加i 赋予它赋予它C语言程序设计语言程序设计17 例:例:int a10; int *p=a; p,a,&a0均指向同一单元,它均指向同一单元,它们是数组们是数组a的首地址,也是的首地址,也是0号号元素元素a0的首地址。的首地址。1a0a1a2a3a9537919p,a,&a0aip+i,a+i,&aip+1,a+1,&a1 p+1,a+1,&a1均指向均指向

13、1号号元素元素a1。 类推可知类推可知p+i,a+i,&ai指指向向i号元素号元素ai。 应该说明的是应该说明的是p是指针变量,而是指针变量,而a,&ai都都是常量。是常量。一、指向数组元素的指针一、指向数组元素的指针C语言程序设计语言程序设计18二、通过指针引用数组元素二、通过指针引用数组元素 引入指针变量后,就可以用两种方法来访问数组元素了。引入指针变量后,就可以用两种方法来访问数组元素了。 第一种方法为第一种方法为下标法下标法,即用,即用ai形式形式访问数组元素。访问数组元素。 第二种方法为第二种方法为指针法指针法,即采用,即采用*(a+i)形式形式,用间接访问的方法,用间接访问的方法来

14、访问数组元素。来访问数组元素。main() int a5,i,*pa=a; for(i=0;i5;i+) scanf(%d“, pa); pa+; pa=a; for(i=0;i5;i+) printf(a%d=%dn,i,*pa); pa+; main() int a5,i; for(i=0;i5;i+) scanf(%d &ai); for(i=0;i5;i+) printf(a%d=%dn,i,ai); C语言程序设计语言程序设计19lint a10,*p;数组在内存中连续存放,数组名数组在内存中连续存放,数组名a为首地址,即为首地址,即&a0lP=a;等价于等价于p=&a0;lP+i、

15、a+i与与&ai等价等价l*(P+ i )、*(a+ i )与与ai 等价等价l可以可以P+,但不可但不可a+l*(p+) 相当于相当于ai+ 总结总结C语言程序设计语言程序设计20float aver(float *pa);main() float sco5,av,*sp; int i; sp=sco; printf(ninput 5 scores:n); for(i=0;i5;i+) scanf(%f,&scoi); av=aver(sp); printf(average score is %5.2f,av);float aver(float *pa) int i; float av,s=

16、0; for(i=0;i5;i+) s=s+*pa+; av=s/5; return av;C语言程序设计语言程序设计21说明:说明:在在C语言中形参和实参都可使用指针变量和数组名:语言中形参和实参都可使用指针变量和数组名: 1、当形参是数组时,要求对应的实参为:、当形参是数组时,要求对应的实参为: 同类型的数组名或指针变量同类型的数组名或指针变量 2、当形参是指针变量,要求对应的实参为:、当形参是指针变量,要求对应的实参为: 同类型的指针变量或数组名同类型的指针变量或数组名形式参数形式参数 指针变量指针变量 数组名数组名实参数实参数 指针变量指针变量 数组名数组名C语言程序设计语言程序设计2

17、2lint a34;213465781091112a0a1a2a&a0a+1&a1a+2&a2a0、*(a+0)、*a、&a00a0+1、*(a+0)+1、*a+1、&a01a1+3、*(a+1)+3、&a13*(a1+2)、*(*(a+1)+2)、a12二维数组的地址二维数组的地址C语言程序设计语言程序设计23设有定义:设有定义: int a34,i,j;引用二维数组元素的方法:引用二维数组元素的方法:(1)下标法:)下标法: aij(2)指针法:指针法: *(*(a+i)+j)#define PF %d,%d,%d,%d,%d,nmain() int a34=0,1,2,3,4,5,6,7

18、,8,9,10,11; printf(PF,a,*a,a0,&a0,&a00); printf(PF,a+1,*(a+1),a1,&a1,&a10); printf(%d,%dn,a1+1,*(a+1)+1); printf(%d,%dn,*(a1+1),*(*(a+1)+1); C语言程序设计语言程序设计24设有定义:设有定义:int a34,i,j; int *p; p=&a00; p为指向数组元素的指针变量,是一个为指向数组元素的指针变量,是一个列指针列指针变量。变量。 p+1则表示指向当前元素的下一个元素。则表示指向当前元素的下一个元素。 元素元素aij的地址表示为:的地址表示为: p

19、+4*i+j aij的值表示为:的值表示为: *(p+4*i+j) 指向二维数组的指针变量指向二维数组的指针变量1、指向数组元素的指针变量、指向数组元素的指针变量C语言程序设计语言程序设计25指向数组元素指向数组元素main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int i,j,*p; p=&a00; for(i=0;i12;i+) if (i%4=0) printf(n); printf(%2d ,*p+); C语言程序设计语言程序设计26nm的二维数组的二维数组a 可分解为一维数组可分解为一维数组a0,a1,. .an-1,而它们分别又是具有而它们分别又

20、是具有m个元素的一维数组。个元素的一维数组。 因此可定义一个指向由因此可定义一个指向由m个元素组成的一维数组的指针变量个元素组成的一维数组的指针变量来处理二维数组。把这个指针变量称为:来处理二维数组。把这个指针变量称为:行指针变量行指针变量 行指针变量说明的一般形式为:行指针变量说明的一般形式为: 类型说明符类型说明符 (*指针变量名指针变量名)长度长度 例:例: int (*p)4 它表示它表示p是一个指针变量,它指向由是一个指针变量,它指向由4个元素组成的一维数组,或说个元素组成的一维数组,或说p可指向一个有可指向一个有4列的二维数组。列的二维数组。2、指向由、指向由m个元素组成的一维数组

21、的指针变量个元素组成的一维数组的指针变量C语言程序设计语言程序设计27 0 1 2 3 4 5 6 7 8 9 10 11a0a1a2a, pa+2, p+2a+1, p+1*p+0*(p+1)+1*p+2*(*(p+3)+3)数组名数组名a为数组的首地址为数组的首地址int a34=0,1,2,3,4,5,6,7,8,9,10,11;int i,j, (*p)4;p=a;数组数组a的元素的元素aij的表示:的表示:*(*(a+i)+j), *(*(p+i)+j)*(ai+j) , *(pi+j)C语言程序设计语言程序设计28数组声明为数组声明为“int a66;”,表达式表达式“*a+i”是

22、是指指 、“*(a+i)”是指是指 、“*a”又是指又是指 。 声明语句为声明语句为” ”int a34;”,下列表达式中与数组元素下列表达式中与数组元素a21等价的是等价的是 。 A、*(a2+1) B、a9 C、*(a1+2) D、*(*(a+2)+1C语言程序设计语言程序设计29# includevoid main() int x44=1, 2, 3, 4, 3, 4, 5, 6, 5, 6, 7, 8,7, 8, 9, 10, i, j; for(i=0; i4; i+)for(j=0; j4; j+) *(*(x+i)+j)/= *(*(x+i)+i)for(i=0; i4; i+)

23、 for(j=0; j4; j+) printf(%3d, *(*(x+i)+j); putchar(n); C语言程序设计语言程序设计30写出下列程序的输出结果:写出下列程序的输出结果: #include #include void f(char*s1) char c; if(*s1! = 0) c=*s1; strcpy(s1,s1+1); f(s1); putchar(c); void main() f(“abcdefg”); C语言程序设计语言程序设计31char cchar(char ch) if(ch=A&ch=Z) ch=ch-A+a; return ch; main() cha

24、r s =ABC+abc=defDEF,*p=s; while(*p) *p=cchar(*p); p+; printf(%sn,s); A) abc+ABC=DEFdef B) abc+abc=defdef C) abcABCDEFdef D) abcabcdefdef C语言程序设计语言程序设计32有以下程序有以下程序void fun(char *c , int d) *c=*c+1 ; d=d+1; printf(%c,%c,*c,d); main() char a=A ,b=a; fun(&b,a); printf(%c,%cn,a,b); 程序运行后的输出结果是程序运行后的输出结果是

25、A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,bC语言程序设计语言程序设计33 指向字符串的指针变量的定义与指向字符变量的指针变指向字符串的指针变量的定义与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。量说明是相同的。只能按对指针变量的赋值不同来区别。 对指向字符变量的指针变量应赋予该字符变量的地址。对指向字符变量的指针变量应赋予该字符变量的地址。如:如: char c,*p=&c; 表示表示p是一个指向字符变量是一个指向字符变量c的指针变量。的指针变量。而:而: char *s=C Language; 则表示则表示s是一个指向字符

26、串的指是一个指向字符串的指针变量。把字符串的首地址赋予针变量。把字符串的首地址赋予s。指向字符串的指针变量指向字符串的指针变量C语言程序设计语言程序设计34指向字符串的指针变量lchar *s=“program”;字符指针字符指针S指向字符串指向字符串“program”首地址首地址l*s的值为的值为pl*s+的值为的值为p,s指向第二个字符指向第二个字符l*+s的值为的值为r,s指向第二个字符指向第二个字符C语言程序设计语言程序设计35例:例:输出字符串中输出字符串中n个字符后的所有字符。个字符后的所有字符。main() char *ps=this is a book; int n=10; p

27、s=ps+n; printf(%sn,ps);运行结果为:运行结果为:book例:字符串的复制例:字符串的复制main() char a=this is a book,b16; int n; for(n=0;an!=0;n+) *(b+n)=*(a+n); *(b+n)=0; printf(%s,b);C语言程序设计语言程序设计36把字符串指针作为函数参数的使用。把字符串指针作为函数参数的使用。 例:要求把一个字符串的内容复制到另一个字符串中,例:要求把一个字符串的内容复制到另一个字符串中,并且不能使用并且不能使用strcpy函数。函数。cpystr(char *pss,char *pds)

28、while(*pds=*pss)!=0) pds+; pss+; main() char *pa=CHINA,b10,*pb; pb=b; cpystr(pa,pb); printf(string a=%snstring b=%sn,pa,pb); while(*pds+=*pss+)!=0);C语言程序设计语言程序设计37 字符数组和字符指针变量注意点字符数组和字符指针变量注意点: 1 、对字符数组只能在定义时作整体赋初始值,如:对字符数组只能在定义时作整体赋初始值,如: char st=“C Language”;而对字符串指针变量则无此限而对字符串指针变量则无此限制,如:制,如: char

29、 *ps=C Language; 2、 对字符串指针方式对字符串指针方式 char *ps=C Language;可可以写为:以写为: char *ps; ps=C Language; 而对数组方式而对数组方式 char st=C Language; 不能写为:不能写为: char st20; st=C Language;而只能对字符数组的各元素逐个赋值。而只能对字符数组的各元素逐个赋值。C语言程序设计语言程序设计38# include# includevoid main() char a520=abc, def, 123, 456, #$%; int i, j; for(i=0; i4; i

30、+) j=0;while(aij) j+;strcat(*(a+i)+j,*(a+i+1); for(i=0; ib)return a; else return b; main() int (*pmax)(); int x,y,z; pmax=max; printf(input two numbers:n); scanf(%d%d,&x,&y); z=(*pmax)(x,y); printf(maxmum=%d,z); C语言程序设计语言程序设计41用函数指针变量形式调用函数的步骤如下:用函数指针变量形式调用函数的步骤如下: 1. 先定义函数指针变量,先定义函数指针变量, 如:如: int (

31、*pmax)();定义定义 pmax为函数指针变量。为函数指针变量。 2. 把被调函数的入口地址把被调函数的入口地址(函数名函数名)赋予该函数指针变量,赋予该函数指针变量,如程序中的如程序中的 pmax=max; 3. 用函数指针变量形式调用函数,如程序中用函数指针变量形式调用函数,如程序中 z=(*pmax)(x,y); 调用函数的一般形式为:调用函数的一般形式为: (*指针变量名指针变量名) (实参表实参表) C语言程序设计语言程序设计42使用函数指针变量应注意以下两点:使用函数指针变量应注意以下两点: a. 函数指针变量不能进行算术运算,函数指针变量不能进行算术运算,这是与数组指针变这是

32、与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。面或前面的数组元素,而函数指针的移动是毫无意义的。 b. 函数调用中函数调用中“(*指针变量名指针变量名)”的两边的的两边的括号不可少括号不可少,其中的其中的*不应该理解为求值运算,在此处它只是一种表示符不应该理解为求值运算,在此处它只是一种表示符号。号。C语言程序设计语言程序设计43int fa(int x) return x*x; int fb(int x) return x*x*x; int f(int (*f1)(), i

33、nt (*f2)(),int x) return (*f2)(x)- (*f1)(x); main() int i; i = f ( f a , f b , 2 ) ; printf(%dn,i); 程序运行后的输出结果是程序运行后的输出结果是A) -4 B) 1C) 4 D) 8用指向函数的指针作为函数参数用指向函数的指针作为函数参数C语言程序设计语言程序设计44float f1(float), f2(float);float fs( ) float s=o, x=a, h=(b-a)/n; int i; for(i=1; i=n; i+) s+=(*f)(x)+(*f)(x+h)*h/2;

34、x+=h; ;C语言程序设计语言程序设计45void main() float y; y=fs(2, 6, 50, f1)+fs(3, 7, 50, f2); printf(%fn, y);float f1(float x) return x*x+x*sin(x);float f2(float x) ; C语言程序设计语言程序设计46返回指针值的函数返回指针值的函数定义指针型函数的一般形式为:定义指针型函数的一般形式为: 类型说明符类型说明符 *函数名函数名(形参表形参表) /*函数体函数体*/ C语言程序设计语言程序设计47# includefind_data(float *a, int n

35、, float data) ; low=0; high=n-1; while(lowdata) high=mid-1; else if(amiddata) low=mid+1; else ; ;C语言程序设计语言程序设计48void main() float b10, *p , data; for(int i=0; i10; i+) scanf(%f, b+i); scanf(%f, &data);p=find_data(b, 10, data); if(p) printf(%fn, *p); else printf(查找不到查找不到%fn, data); C语言程序设计语言程序设计49mai

36、n() int i; char *day_name(int n); printf(input Day No:n); scanf(%d,&i); if(i%sn,i,day_name(i); char *day_name(int n) char *name= Illegal day, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday; return(n7) ? name0 : namen); C语言程序设计语言程序设计50注意的是注意的是函数指针变量和指针型函数函数指针变量和指针型函数在写法和意义上的在写法和意义上的区别

37、。如区别。如int (*p)()和和int *p()是两个完全不同的量。是两个完全不同的量。int (*p)()是一个变量说明,说明是一个变量说明,说明p 是一个指向函数入口是一个指向函数入口的指针变量,该函数的返回值是整型量。的指针变量,该函数的返回值是整型量。int *p() 则不是变量说明而是函数说明,说明则不是变量说明而是函数说明,说明p是一个指是一个指针型函数,其返回值是一个指向整型量的指针,针型函数,其返回值是一个指向整型量的指针,*p两边两边没有括号。没有括号。C语言程序设计语言程序设计51指针数组指针数组指针数组说明的一般形式为:指针数组说明的一般形式为: 类型说明符类型说明符

38、 *数组名数组名数组长度数组长度 例如:例如: int *pa3; 表示表示pa是一个指针数组,它有三个数组元素,是一个指针数组,它有三个数组元素, 每每个元素值都是一个指针,指向整型变量。个元素值都是一个指针,指向整型变量。C语言程序设计语言程序设计52main() int i; char *day_name(int n); printf(input Day No:n); scanf(%d,&i); if(i%sn,i,day_name(i); char *day_name(int n) char *name= Illegal day, Monday, Tuesday, Wednesday,

39、 Thursday, Friday, Saturday, Sunday; return(n7) ? name0 : namen); C语言程序设计语言程序设计53例:由字符指针数组处理多个字符串的问题例:由字符指针数组处理多个字符串的问题#include string.hmain() void sort(char *name,int n); void print(char *name,int n); char *name= CHINA,AMERICA, AUSTRALIA, FRANCE,GERMAN; int n=5; sort(name,n); print(name,n);C语言程序设计语

40、言程序设计54void sort(char *name,int n) char *pt; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) pt=namei; namei=namek; namek=pt; void print(char *name,int n) int i; for (i=0;in;i+) printf(%sn,namei); C语言程序设计语言程序设计55注意注意指针数组指针数组和和指向由指向由m个元素组成的一维数组的指针变量个元素组成的一维数组的指针变量在在写法和意义上的区别。如写法和意义上的区别。如

41、int (*p)(3)和和int *p(3)是两个完全不是两个完全不同的量。同的量。int (*p)(3)说明说明p 是指向是指向由由3个元素组成的一维数组的个元素组成的一维数组的指针变量。指针变量。int *p(3)表示表示pa是一个指针数组,它有三个数组元素,是一个指针数组,它有三个数组元素, 每个元每个元素值都是一个指针,指向整型变量。素值都是一个指针,指向整型变量。C语言程序设计语言程序设计56二维指针二维指针 指针数组名同样表示指针数组的首地址,是一个指针数组名同样表示指针数组的首地址,是一个指针变量的地址,即是指针的指针。指针变量的地址,即是指针的指针。 指针变量在内存中仍有一个存

42、储单元,该单元指针变量在内存中仍有一个存储单元,该单元的地址,即指针的指针。如下图:的地址,即指针的指针。如下图:a10p&app&p指向指针的指针变量的定义:指向指针的指针变量的定义:int a, *p=a;*pp=&p; 类型说明符类型说明符 *指针名指针名C语言程序设计语言程序设计57main()char *name= CHINA,AMERICA, AUSTRALIA, FRANCE,GERMAN; int *p; int i;for(i=0;i5;i+) p=name+i;printf(“%sn”,*p); C语言程序设计语言程序设计58main()函数的参数函数的参数main函数的函数头可写为:函数的函数头可写为: main (argc,argv)规定规定argc必须是整型变量必须是整型变量,是命令行中参数的个数。是命令行中参数的个数。argv必须是指向字符串的指针数组。必须是指向字符串的指针数组。main函数的函数头应写为:函数的函数头应写为: main (int argc,char *argv)

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

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com