交换两个整形变量的数值(指针)
//1.交换两个整形变量数值swap函数参数为指针形
1 #include <stdio.h> 2 3 int main(){ 4 int x,y; 5 scanf("%d,%d",&x,&y); //输入两个值 6 int swap(int *pi,int *pj); //声明swap函数 7 swap(&x,&y); //引用swap函数 8 9 10 } 11 void swap(int *pi,int *pj){ //定义指针类型作为参数 返回值是空类型 12 int t; 13 t = *pi; 14 *pi = *pj; 15 *pj = t; 16 printf("%d,%d",*pi,*pj); //输出指针指向的数值 17 18 } 19 20 /*总结:感觉指针指向一个地址值 子函数中先定义两个指针类型形参 母函数调用时输入int型实参地址值 两个指针分别指向两个实参的地址值*/
结果:
1,2
2,1请按任意键继续. . .
1 /*1.void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m}为何无法实现交换? 2 *m=*p这句有问题 *p是一个整形变量(a),而*m是指针m指向地变量,但 *m的存储是任意的可能将电脑中莫伊个重要的数据付上值。所以应将*m赋值给一个整形变量暂时存储。然后进行交换 3 准确的说int *p=&a是int型的a,而int* m是int*型,两个类型不同所以不行。 4 */ 5 6 /*2.xoid swap(int *p,int *q){int *m;m=p;p=q;q=m}为什么无法进行交换? 7 c语言中函数调用时参数传递是以单向值传递方式进行,指针也是因此swap函数中虽然进行了两个值互换,但在输出时不能通过调用函数改变实参的值!我们可以 改变实参指针指向变量的值来实现 8 */ 9 10 //总结:指针指向不同的变量值不同,而变量则不行; 11 // 调用函数是不能改变main函数中实参的值 但在调用函数前可以用指针指向不同的值来改变进入调用函数的实参(不同于main中的实参) 12 13 //3.用构建comp函数 实现两个整数比较,比较较大值返回给main,要求comp参数和返回值都是指针类型的数据。
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main(){ 4 5 int x,y; 6 scanf("%d,%d",&x,&y); //输入两个值 7 int *m=&x; //指针指向输入的值 8 int *n=&y; 9 int comp(int *p,int *q); //声明函数 10 int h = comp(m,n); //调用函数 11 printf("%d\n",h); //输出 12 system("pause"); 13 } 14 int comp(int *p,int *q){ //定义一个返回值是int 形参是指针形的函数 15 if(*p>*q){ //判断指针指向的数值大小 16 return *p; //返回*p指向得整形变量 17 }else{ 18 return *q; //返回*q指向得整形变量 19 } 20 } 21 22 结果:1,2 23 2 24 请按任意键继续. . . 25 26 //总结:调用函数中返回值是int型