#include<stdio.h> void swap(int *x,int *y);//交换*x,*y ,此处的*x,*y 是形参 int main() {int a=1; int b=2; printf("x=%d y=%d\n",a,b); swap(&a,&b);//将a,b的地址附给指针变量使*x指向a,*y指向b,将实参变量的值传给形参也就是值传递 printf("turn:\n"); printf("x=%d y=%d\n",a,b); } void swap(int *x,int *y) { int t; t=*x;//使*x,*y互换,也就是使a,b互换 *x=*y; *y=t; }
2,结果:
x=1 y=2 turn: x=2 y=1 -------------------------------- Process exited after 0.01797 seconds with return value 0 请按任意键继续. . .
3,关于问题
void swap(int *x,int *y){int *t;*x=*t;*x=*y;*y=*t;}为何无法实现交换?
*x就是a的整形变量,而*t是指针变量但是t中并没有确定的值,他是不可预见的,所以指向的单元就是不可预见的,所以*t有可能给一个储存着信息的存储单元,这样就会破坏正常的运行,所以应该让*x附给一个整形变量,而整形变量t只是辅助变量为的是实现*x,*y的交换。
void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现交换?
c语言中实参和形参的数据是单向的“值传递”,所以指针变量也要遵循,不可能通过调用函数来改变实参指针变量 的值,但可以改变指针变量的所指的变量。
4,
#include<stdio.h> int* comp(int *x, int *y)//调用函数 { return (*x >*y ? x : y);//借鉴其他同学的,运用了函数return及运算符 ?: // 先判断传递过来的值,当满足条件*m>*n时,执行前一条语句*m并返回*m的值;不满足条件时,执行后面一条语句*n并返回*n的值 } int main()//主函数 { int a, b,t; printf("输入两个数:\n"); scanf("%d,%d", &a,&b); int *x, *y;//将a,b的值附给x,y x = &a; y = &b; t = *comp(x, y);//执行函数comp,并将返回值赋值给max printf("输出的结果:\n" ); printf("最大值=%d\n", t); }
结果:
输入两个数: 5,4 最大值:5 -------------------------------- Process exited after 2.656 seconds with return value 10 请按任意键继续. . .
总结:
1,在使用swap函数时,*t是指针变量但是t中并没有确定的值,他是不可预见的,所以指向的单元就是不可预见的,所以*t有可能给一个储存着信息的存储单元,这样就会破坏正常的运行,所以应该让*x附给一个整形变量,而整形变量t只是辅助变量为的是实现*x,*y的交换。
2,“值传递”,是单向的,所以指针变量也要遵循,不可能通过调用函数来改变实参指针变量 的值,但可以改变指针变量的所指的变量。
3,comp函数我是不知道是什么的,只知道他的目是比较大的值通过返回值返回给main。要求comp的参数和返回值都是指针类型数据。
所以我就看了一下其他的同学的,知道了用return,然后写的!谢谢老师。