作业2 3.26

#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);
}

 结果:

输入两个数:
54
最大值: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,然后写的!谢谢老师。

 

posted @ 2017-03-26 10:57  孙鸣阳  阅读(182)  评论(0编辑  收藏  举报