收藏 分享(赏)

c#程序设计_第10章__指针.ppt

上传人:hwpkd79526 文档编号:10023639 上传时间:2019-09-29 格式:PPT 页数:95 大小:486.50KB
下载 相关 举报
c#程序设计_第10章__指针.ppt_第1页
第1页 / 共95页
c#程序设计_第10章__指针.ppt_第2页
第2页 / 共95页
c#程序设计_第10章__指针.ppt_第3页
第3页 / 共95页
c#程序设计_第10章__指针.ppt_第4页
第4页 / 共95页
c#程序设计_第10章__指针.ppt_第5页
第5页 / 共95页
点击查看更多>>
资源描述

1、第10章 指 针,10.1 指针的概念 10.2 变量的指针和指向变量的指针变量 10.3 数组的指针和指向数组的指针变量 10.4 字符串的指针和指向字符串的指针变量 10.5 函数的指针和指向函数的指针变量 10.6 返回指针值的函数 10.7 指针数组和指向指针的指针 10.8 小结,10.1地址和指针的概念,内存区的每一个字节有一个编号,这就是“地址” 。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。,.按变量地址存取变量值的方式称为“直接访问”方式(,);(,);,10.1 指针的概念,指针:变量的内存地址; 指针变量:存放指针的变量int i, j

2、, k; int *i_point ; scanf(“%d%d%d“,i=3; (直接访问),间接访问,直接访问,2000,i_point,i,3,i_point=,类型不同,变量 与 常量,获得变量,地址形式,看同一对象 的不同角度,变量 与 指针 指针 与 指针变量,直接访问 与 间接访问,变量内容 与 变量地址 变量值 与 变量指针 内存地址 与 内存单元内容,必须清楚以下概念的区别,10.2变量的指针和指向变量的指针变量,变量的指针就是变量的内存地址,是一个常量。 有一个变量 a ,也有一个指向a的指针变量 a_pointer , 则: a 与 *a_pointer 是同一回事。 *

3、表示指向 ,为指针运算符 指针变量的定义 如: int a=2 ,b=3; int *p1 ,*p2 ; p1=是等价的. 一个指针变量只能指向同一类型的变量,10.2.1 定义一个指针变量,基类型 *指针变量名 int i,j; float f; int *poiner_1,*pointer_2; int *po1; float *fp; pointer_1=,此时:i 与* pointer_1,j与* pointer_2,f与*fp是等效的,注意两点:,1.在指针变量的定义中,*表示后面的变量是指针变量。变量名是: pointer_1,pointer_2; 2.指针变量必须指出基类型。因为

4、不同类型的指针所指向的变量的字节数是不同的。当进行加1操作时,要跳过不同的字节数。 指针变量是一个可以变化的量,可以根据编程的需要指向不同的内存空间,指针变量的内容是指针。,10.2.2 指针变量的引用,例10.1: main() int a,b; int *p1,*p2; a=100;b=10; /*变量赋值*/ p1= ,两个运算符: & 取地址运算 * 指针运算符或指向 开头虽定义了两个指针变量,但未具体指向 最后的两个输出函数的作用是一样 程序中出现的两次*p1的区别给指针变量赋值,要特别注意,两个运算符&与* (右结合性),int a,b ; int *p1,*p2 ; p1=,结果

5、: 7 9,main() int *p1,*p2,*p,a,b; scanf(“%d,%d”, 运行结果: 5,9 a=5,b=9 max=9,min=5,改为: c=a;a=b;b=c;,程序中改变的是指针变量的值,而 变量本身没变化;相当只调整房间 号,而未惊动客人,例.1.2 输入a和b两个整数,按先大后小的顺序输出,10.2.3 指针变量作为函数参数,函数参数使用一般变量,void swap(int i,int j) int temp; temp=i; i=j; j=temp; main() int a=5,b=10; swap(a,b); printf(“swaped:n“); pr

6、intf(“a=%d,b=%dn“,a,b); ,因为参数传递是单向的, 形参、实参占用的是不同的内存空间, 所以在尽管在swap中交换了形参i,j值,实参a,b不会改变。,函数参数使用指针变量,在函数中交换指针变量值,void swap(int *p1,int *p2) int *ptemp; ptemp=p1; p1=p2; p2=ptemp; main() int a=5,b=10; int *pa,*pb; pa= ,形参、实参占用的是不同的内存空间,所以在尽管在swap中交换了形参指针变量pi,pj值,实参指针变量pa,pb不会改变,还是分别指向a,b,函数参数使用指针变量,在函数中

7、交换指针变量所指向的变量的值,void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=ptemp; main() int a=5,b=10; int *pa,*pb; pa= ,以前未用指针变量时,函数调用时,实参与形参相当于不同房间放着相同的物品,彼此互不影响,只从被调函数返回一个值return。 指针变量作函数参数时,主函数可以从被调函数得到多个返回值,函数可以不要return()语句了。,指针作为函数参数使用方法:,1.在主函数中设n个变量, 用n个指针变量指向它们 2.然后将指针变量作为实参,将这n个变量的地址传给被调函数

8、的形参 3.通过形参指针变量,改变这n个变量的值 4.主函数中就可以使用这些改变了值的变量,例10-2:输入a,b;交换a,b数据后输出,10.3数组的指针和指向数组的指针变量,数组的指针:数组的起始地址。 数组元素的指针:数组元素的地址。 int a =1,3,5,7; int *p; p=a; 数组的指针也是第0个元素的指针。,引用数组元素可以用下标法如a1,也可以用指针法, 法,通过指针找到所需的数组元素,占用内存少,速 度快.,10.3.1 指向数组元素的指针,int a10 ;int *p ; p= 是等价的 用指针变量指向数组: int *p=a ; 不能当作*p=a,而是p=a

9、数组名充当数组指针:如 它具有二重性即(1)数组中第一个元素的地址(2)整个数组的地址 也可以指向其它元素 p=&a3,10.3.2 通过指针引用数组元素,如果p的初值为&a0,即有p=&a0则: p+i与a+i为ai的地址。计算方法为: a+i*d 其中d为一个数组元素所占的字节数,如果 指针变量 p指向数组元素 a2,若*p=1,则等价于a2=1。而p+1:为指向下一个元素,但并不是p的值简单加1,如果a为int 型数组,则地址加2。 如p为2000,则p+1为2002,指向数组的指针变量也可以带下标,如pi与*(p+i)等价。, *(p+i)或*(a+i)是p+i或a+i所指向的数组元素

10、,即ai. 如*(p+5),*(a+5)就是a5。在编译时,把数组ai元素就是处理成 *(a+i)。实际上是变址运算符。,引用一个数组元素可用下标法和指针法。 (1)下标法,如ai,pi (2)指针法, *(a+i) , *(p+i),例10.5 输出数组中全部元素,(1)下标法 main() int a10,i;for (i=0;i10;i+) scanf(“%d”,(2)通过数组名计算数组元素地址,找出元素的值,main()int a10,i;for (i=0;i10;i+) scanf(“%d”, ,(3)用指针变量指向数组元素,main() int a10;int *p; for (i

11、=0;i10;i+) scanf(“%d”, ,上述三种方法的比较:,(1)第一(ai)与第二(*a+i)种执行的效率相同,并寻找数组元素费时较多,每次都要计算元素地址, 即*(a+i) (2)用第三(*p+)种较快,因指针变量直接指向元素,且指针变量的自加操作又较快又有规律, 执行p+操作 (3)下标法比较直观,而用地址法和指针法不直观,几个要注意的问题:, int a10=1,2,3,4,5,6,7,8,9,10, *pfor (p=a;a(p+10);a+) printf (“%dn“,*a); int a10=1,2,3,4,5,6,7,8,9,10, *p=a;for (;p(a+1

12、0);p+) printf (“%dn“,*p);,指针变量p值自身可以改变,但数组名a不能,数组的首地址是常量。p是指针变量,p+合法; 而a是一个数组名,是常量,a+不合法。,要注意指针变量的当前值;如,main() int *p,i,a4;p=a; for (i=0;i4;i+)scanf(“%d”,p+);for (i=0;i4;i+,p+) printf(“%d”,*p); 试分析此程序错在哪里? 执行完第一个循环,p已指向数组的末尾了。如:有p=a;后a+1与p+1指向同一个地址。,p=a;,指针变量的运算p=a,p+ ;,p=p+1 或p+=1 p指向a1,等效*(p+), 取出

13、p指向的元素的值,p指向下一元素,例如,*(+p), 先p指向下一元素 取出p指向的元素的值,,(*p)+ 表示指向的元素加1, (a0)+, 如a0=3 a0)+的值为4,(*p)+ +,*p+ ;,如果p当前指向a 数组的第i个元素。则: *(p-)相当于 ai- *(+p) 相当于 a+i *(-p) 相当于 a-i 想输出a数组100个元素,p=a; while(pa+100) printf(“%d“,*p+);,10.3.3 数组名作函数参数,数组名作为函数的实参和形参,main() int array10; f(array,10); ,f(int arr,int n) ,这种方式实

14、际上是传递的数组的首地址。 f(int *arr, int n),数组元素作函数参数,与一般变量相同,是“单向值传递” 数组名作函数参数,是“单向地址传递” 即实参数组与形参数组对应内存中同一个数组,调用时实参将数组首地址传给形参。 数组名与指向数组的指针变量作函数参数,其作用是一样的。 数组名是可以即用的,而指针变量必须赋值后才能使用。 实参与形参有4种对应关系。,例如,10.3.4 指向多维数组的指针和指针变量,1.多维数组的地址 以二维数组为例,说明多维数组的地址: static int a34=1,3,5,7,2,4,6,8,9,1,0,1;,此二维数组可以看作三个一维数组组成的数组

15、a为二维数组的首地址 a0或*a为第一个一维数组的首地址 a00或*(*a+0)为第一个一维数组的第一个元素,*(a+1)+1=a1+1 *(a+2)+2=a2+2,*(*(a)+1)=*(a0+1) *(*(a+1)+2)=*(a1+2),不要把, aij *(ai+j) *(*(a+i)+j)数组元素,ai ,a+i &ai,a是二维数组名,不同于一维数组,如: static int a34=1,3,5,7,2,4,6,8,9,1,0,1; int *p;可以 p=a0;而p=a错误。,#define FORMAT “%u,%un“ main() int a 34=1,3,5,7,9,11

16、,13,15,17,19,21,23; printf (FORMAT,a,*a); printf (FORMAT,a0,*(a+0); printf (FORMAT,例10.11输出二维数组有关值,158,158 158,158 158,158 166,166 166,166 174,174 174,174 9,9,a20 *(a2+0) *(*(a+2)+0) &a20 a2 +0 *(a+2) +0&a20 &a2 a+2,2. 指向多维数组的指针变量,(1)指向数组元素的指针变量: main() static int a34=1,3,5,7,9,11,13,15,17,19,21,23;

17、 int *p;for ( p=a0;pa0+12;p+) if(p-a0)%4=0) printf (“n“);printf(“%4d“, *p); 34 维数组 ,元素aij i*m+j a23 如:p=a0 ,则*(p+2*4+3)=*(p+11)等效于 a23,1 3 5 7 9 11 13 15 17 19 21 23,(2)指向由m个元素组成的一维数组的指针变量,int a34; int (*p)4;p=a;,p+1,p,p为指针变量名,p是指向1维数组的指针变量,*( (p+2)+3)+1 *(p+2)+3)+1,指向第i行的地址 是指向第2行第3列的地址 是指向第5行的地址 是

18、第2行第3列的元素的值 第5行0列元素的地址 第5行0列元素的值,p+i,*(p+2)+3,(p+2)+3,*(*(p+2)+3),*( (p+2)+3),*( (p+2)+3),例10.13 输出二维数组任一行任一列元素的值,main()static int a34=1,3,5,7,9,11,13,15,17,19,21,23; int (*p)4,i,j;p=a;scanf (“i=%d,j=%d“, ,p+2和*(p+2)具有相同的值, (p+2)+3 和*(p+2)+3的值就不同了。,例10.14 有一个班,3个学生,各学4门课,计算总平均分数,及第n个学生的成绩,main() voi

19、d average(float *p,int n); void search(float (*p)4,int n); float score34=66,67,70,60, 80,87,90,81,90,99,100,98; average(*score , 12); search(score,2);,指向列的指针,指向行的指针,score0,3.多维数组的指针作函数参数,void average(float *p, int n) float * p_end;float sum=0,aver; p_end=p+n-1; for (;p=p_end;p+)sum=sum+(*p); aver=su

20、m/n; printf (“average=%5.2fn“,aver); void search(float (*p)4,int n) int i;printf (“the score of No. %d are:n“,n);for (i=0;i4;i+)printf (“%d5.2f “, *(*(p+n)+i);,average=82.25 the score of no.2 are: 99.00,99.00,100.00,98.00,10.4字符串的指针和指向字符串的指针变量,10.4.1 字符串的表示形式 (1)用字符数组实现 static char str=“china“; (2)

21、用字符指针实现 char * string=“china“; printf (“%sn“,string); 相当于 char * string;string=“china“; 而不是:char * string;*string=“china“;,printf (“%sn“,对字符型数组或字符型指针变量,可以输出一个字符串,但对数值型数组只能输出单个元素,不能一次输出整个数组。 int i10; . printf(“%dn“,i);,例10.18 .19 将字符串a 复制到字符串b,main() char a=“I am a boy.“,b20; int i; for(i=0;*(a+i)!=0

22、; i+) *(b+i)=*(a+i); *(b+i)=0; printf (“string a is %sn“,a); printf (“string b is is %sn“,b); printf(“n“);,main() char a=“I am a boy.“, *p1,*p2,b20;int i; p1=a; p2=b; for(;*p1!=0;p1+,p2+) *p2=*p1; *p2=0; printf (“string a is %sn“,a); printf (“string b is is %sn“,b);printf (“n“);,10.4.2 字符串指针作函数参数,10

23、.4.2用函数调用实现字符串的复制 (1) 用字符数组作函数参数。例10.20 复制字符串 void copy_string(char from, char to) int i=0; while(fromi!=0)toi=fromi;i+; toi=0; main() char a=“I an a teacher.“;char b=“you are a student.“printf (“stirng a=%snstring b =%sn“,a,b);copy_string(a,b); printf (“stirng a=%snstring b =%sn“,a,b);,输出结果: string

24、_a= I am a student. string_b=you are a student. string_a= I am a student. string_b= I am a student. main() char *a=“I an a teacher.“;char *b=“you are astudent.“printf (“stirng a=%snstring b =%sn“,a,b);copy_string(a,b); printf (“stirng a=%snstring b =%sn“,a,b);,(2)形参用字符指针变量,void copy_string(char *fro

25、m, char *to) for (;*from !=0;from+,to+)*to=*from;*to=0; main() char *a=“I an a teacher.“;char *b=“you are astudent.“;printf (“stirng a=%snstring b =%sn“,a,b);copy_string(a,b); printf (“stirng a=%snstring b =%sn“,a,b);,(3)对copy_string函数可以简化, void copy_string(char *from, char *to) for (*to=*from)!=0;)

26、to+;from+; while (*to+=*from+)!=0); while (*to+=*from+); while (*from!=0) *to+=*from+; to=0; for (;(*to+=*from+)!=0;); for (;(*to+=*from+);); void copy_string(char from, char to char *p1,*p2; p1=from;p2=to; while(*p2+=*p1+!=0);,if(a!=0) 与 if(a) 等效,因为字符串是一个整体,故只要指出字符串在内存中的首地址,无论采用数组名或指针变量,均可以访问字符串的全部

27、成员,直到遇“0”为止。str1或*(string+1)均表示第1个字符 数值型数组只能逐个元素引用,不能企图用数组名来输出全部元素。 字符串可以全部引用(用%s格式),也可以访问每一个元素(用%c格式)。 设一个指针变量,通过改变它的值来指向不同的字符串。,10.4.3字符指针变量与字符数组的讨论,字符数组由若干元素组成,而字符指针变量中存放的是地址 赋值方式不同 char *a;a=“china”; 字符数组不能赋值: char str10;str=“china”;,如果欲使字符数组有一个值, 方法一:赋初值 char str10=“China“; 方法二:用字符串copy 函数 strc

28、py(str,“China“);,对字符指针变量赋初值: char *str=“I love China!“; 等价于:char *str; str=“I love China!“; 而: char str=“I love China!“; 不等价于:char str14; str=“I love China!“; char str10;scanf(“%s“,str);char str;scanf(“%s“,str); 因为此时str指向一个不确定值 可以 char str,a20; str=a;scanf(“%s“,str);,指针变量的值是可以改变的 main() char *a=“ I

29、love China!“;a=a+7; printf (“%s“,a); 输出:China 但不可: char str=“ I love China!“; str=str+7; printf (“%s“,str); 定义了一个指针变量,可以用下标方式引用变量 例 10.22main() char *a=“I love China!“;int i; printf (“the sixth character is %cn“, a5 );for (i=0; ai !=0;i+) printf (“%c“,ai);,用指针变量指向一个格式字符串; char *format; format=“a=%d,

30、b=%fn”; printf(format,a,b); 也可以用字符数组实现。如: char format=“a=%d,b=%fn”; printf(format,a,b); 但不能:char format; format=“a=%d,b=%fn”; printf(format,a,b);,10.5函数的指针和指向函数的指针变量,10.5.1 用函数指针变量调用函数 一个函数在调用时被分配一个入口地址,即函数指针,可以定义一个指向函数的指针变量来指向它。 基类型 (*指针变量名)() int (*p)( )为一个指向函数的指针变量; 但不能写成 int *p( ) int *p( )为一个返回

31、值为指向整型变量的指针的函数; 函数名max为函数的入口地址;,例,说明:,(1) 定义的形式:数据类型 (*指针变量名)(); (2) 函数的调用可以通过函数名调用,也可以通过函数指针调用。 (3) (*p)()表示定义一个指向函数的指针变量,它并不固定指向哪一个函数的。 (4) 给函数指针变量赋值时,只需给出函数名而不必给出参数。 P=max; (5) 用指针变量调用函数时,只需将(*p)代替函数名。c=(*p)(a,b); (6) p+n, p+, p-无意义,10.5.2 用指向函数的指针变量作函数参数,指向函数的指针是很有用的,理由有2: 第一、我们不可能把函数本身当成参数传给另一个

32、函数,但可以把指针当作参数。 第二、我们不可能把函数本身存入数组或结构体中,却可以把函数指针存入数组或结构体中。 用函数指针可以设计所谓的派遣(dispatch)表,有一个index变量1,210, 如index为1时执行fn1, 其余类推。要实现这一功能,通常要一大堆if或switch语句测试index的值。用指向函数的指针可是程序大为简化。,int fn0(),fn1(),fn2(),fn3(),fn4(),fn5(),fn6(),fn7(),fn8(),fn9(),fn10(); static int (*disptach)()= fn0,fn1,fn2,fn3,fn4,fn5,fn6,

33、fn7,fn8,fn9,fn10.(*disptachindex)();,main( ) int max( int,int),min(int,int );int add(int ,int); int a,b; scanf(“%d,%d“,应用:,max(int x,int y) int z; if(xy)z=x; else z=y; return z; min(int x,int y) int z; if(xy)z=x; else z=y; return z; add(int x,int y) int z; z=x+y; return z; ,10.6返回指针值的函数,类型名 函数名(参数名)

34、 int *a(x,y); 表示一个返回指向整型变量的指针的函数,pointer,例10.25 有若干个学生的成绩(每个学生有4门课程),要求在输入学生序号以后,能输出该学生的全部成绩。,main() float score4=60,70,80,90,59,86,67,99, 34,78,90,66; float *search(float(* pointer)4,int n); float *p; int i,m; printf (“enter the number of student:“); scanf (“%d“,p=search(score,m); for(i=0;i4;i+)pri

35、ntf (“%5.2ft“,*(p+i); float *search(float (*pointer)4, int n) float *pt; pt=*(pointer+n); return(pt);,例10.26 对上例中的学生,找出其中有不及格的学生及其学号,main() float score4=60,70,80,90, 59,86,67,99,34,78,90,66; float *search(float(* pointer)4); float *p; int i,j; for(i=0;i3;i+) p=search(score+i);if(p=*(score+i)printf(“

36、no. %d score: “,i)for(j=0;j4;j+)printf(“%5.2f “, *(p+i);printf(“n“); ,float *search(float (*pointer)4) int i;float *pt; pt=*(pointer+1);for(i=0;i4;i+)if(*(*pointer+i)60) pt=*ponter; return(pt);,10.7指针数组和指向指针的指针,10.7.1 指针数组的概念: 类型名 数组名数组长度 一个数组,其元素均为指针类型数据. 例如: int * name4 ; 试比较:int a4; 它适合于用来指向若干个字符

37、串,使字符串处理更方便;比用字符数组节省空间; 指针数组的元素也可以指向整型或实型数据,如果用二维数组: char name17=“Follow me“,“BASIC“,“Great Wall“, “FORTRAN“,“Computer design“ char name5;,例10.27 将若干字符串按字母(由小到大)顺序输出,main() void sort(char *name,int n); void print (char *name,int n); char *name=“follow“, “basic“, “great wall“, “fortran“, “computer de

38、sign“; n=5; sort(name,n); print (name,n); void print (char *name,int n) int i; for(i=0;in;i+)printf(“%sn“,namei);,void sort (char *name ,int n) char *temp; int i,j,k; for (i=0;i0) k=j;if (k!=i) temp=namei;namei=namek;namek=temp;,10.7.2指向指针的指针,:即指向指针数据的指针变量 如: char *name5; char * * p ; p=name ; 指针数组的

39、元素也可以指向整型或实型数据 p=name+2; printf (“%on“,*p); /*输出name2的地址*/ printf (“%sn“,*p); /*输出字符串Great wall*/,例子,例10.28 使用指向指针的指针,main() char *name=“follow me“,“basic“,“great wall“,“fortran“,“computer design“; char *p; int i; for (i=0;i5;i+) p=name+i;printf (“%sn“,*p); ,例10.29,main() static int a5=1,3,5,7,9; in

40、t *num5= p+ ,10.7.3 指针数组作main函数的形参,例如:main (int argc,char * argv) 由于main函数是由系统调用的,故形参值应由系统提供,即实参是和命令一起给出的。 命令名 参数1 参数2 参数3 . 比如:file1 China Beijing Baoding argc: 命令行参数的个数(包括命令名),本例 argc 为 4,argv:为指针数组,它指向命令行中的字符串,main() (int argc,char *argv) while (argc1) +argv;printf (“%sn“, *argv); -argc;,DOS echo

41、命令,main() (int argc,char *argv) int i;for (i=1;iargc;i+)printf (“%s%c“,argvi,(iargc-1? :n ,10.8 小结,int i; int *p; int an; int *pn; int (*p)n; int f (); int *p(); int (*p) (); int *p;,10.8.1有关指针的数据类型,10.8.2 指针运算小结,p=&a; p=array; p=&arrayi; p=max; p=p1;,10.8.2 void 指针类型,char *p1; void *p2; . p1=(char

42、*) p2;,第10章结束,例. 10.3 输入两个整数 按大小顺序输出,swap(int *p1,int *p2) int p ;p=*p1 ;*p1=*p2 ; *p2=p ; main() int a,b ; int *point1,*point2; scanf(“%d,%d”,swap(int *p1,int *p2) int *temp ; *temp=*p1 ;*p1=*p2 ; *p2=*temp ;,swap(int x,int y) int temp ; temp=x ;x=y ; y=temp ;,swap(a,b);,此时temp无确定 的指向,int *temp,x;t

43、emp=,不能企图通过改变指针形参 的值而使指针实参的值改变,swap(int *p1,int *p2) int *p ;p=p1 ; p1=p2 ; p2=p ; main() int a,b ; int *point1,*point2; scanf(“%d,%d”,*p+ 的使用,main() int a5=2,3,4,5,6;int *p=a,c;c=*p+;printf(“%d,%dn“,c, *p); ,结果: 3,3,main() int a5=2,3,4,5,6;int *p=a,c;c=*(+p);printf(“%d,%dn“,c, *p); ,结果: 2,3,实参和形参都用

44、数组名 实参用数组名,形参用指针变量 实参和形参都用指针变量 实参用指针变量,形参用数组名,注意:如果用指针变量作实参,必须使指针变量指向一个已定义的数组。 例10.7,例10.8,例10.9,例10.10,main( ) int max( ); int a,b,c; scanf(“%d,%d“,main( ) int max( int,int); int (*p)( ); int a,b,c; p=max; scanf(“%d,%d“,2000,2010,2016,2027,2035,指针的指针,例10.4 输入a、b、c 3个整数,按大小顺序输出,swap(int *pt1,int *pt

45、2) int temp;temp=*pt1; *pt1=*pt2; *pt2=temp; exchange (int *q1,int *q2, int *q3) if (*q1*q2) swap(q1,q2); if (*q1*q3) swap(q1, q3); if (*q2*q3) swap(q2, q3);,main() int a,b,c,*p1,*p2,*p3; scanf(“%d,%d,%d“,例10.7 将数组a中n个整数按相反的顺序存放,void inv(int x , int n) int temp,i,j,m=(n-1)/2; for(i=0;i=m;i+) j=n-1-i

46、;temp=xi;xi=xj; xj=temp; return; main () int i, a10=3,7,9,11,0, 6,7,5,4,2;,printf(“ the orginal array:n“); for(i=0;i10;i+)printf (“%d,“ ,ai); printf(“n“); inv(a,10); printf (“the array has been inverted:n“); for(i=0;i10;i+)printf (“%d,“ ,ai); printf(“n“); ,形参不用数组,该用改用指针变量,void inv(int *x, int n) int *p,temp,*i,* j, m=(n-1)/2; i=x;j=x+n-1;p=x+m; for(;i=p;i+,j-) temp=*i;*i=*j; *j=temp; return; main () int i, a10=3,7,9,11,0, 6,7,5,4,2;,

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

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

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


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

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

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