交换两个整型变量的数值

#include<stdio.h>
#include<conio.h>
main()
{
void swap(int *p1,int *p2);//定义一个函数作用是交换两个整型变量的数值
int x,y;//定义整型变量x,y
int *a1,*a2;//定义整型指针a1,a2
printf("任意输入两个数值:");
scanf("%d,%d",&x,&y);//任意输入两个数值赋值到x,y中
a1=&x;
a2=&y;
swap(a1,a2);//交换 a1,a2
printf("%d,%d",*a1,*a2);
getch();
return 0;
}
void swap(int *p1,int *p2)//调用swap交换函数,交换两个变量的值
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}

我认为本题的重点是在于对*p及p的理解。  *p是指针,作用是存放变量的地址而p是地址所储存的内容。 关键是子函数调用时交换的应用,注意是变量值的交换不是指针指向问题。

输出结果  任意输入两个数值:1,2
         2,1

void swap(int *p1,int *p2)
{
int *p;
*p=*p1;//此语句有问题
*p1=*p2;
*p2=*p;
}

*p1就是x,是整型变量。而*p是指针变量p所指向的变量。但p中并无确定的地址值,它的值不可预见。*p所指向的单元也不可预见。

因此对*p赋值可能会破坏系统的正常工作状况。

void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}

C语言中实参和形参之间的数据传递是单向的“值传递方式",指针变量作为函数参数也要遵循这个规则。调用函数不可能改变实参指针变量的值,但是可以改变实参指针变量所指变量的值。

 

#include<stdio.h>
int comp(int*x,int*y)
{
      if(*x>*y) 
      return *x;
      else
      return *y;
}
int main()
{int x,y,*p1,*p2;
scanf("%d,%d",&x,&y);
p1=&x;
p2=&y;
printf("max=%d\n",comp(p1,p2));
return 0;
}

1,2
max=2


--------------------------------
Process exited after 13.7 seconds with return value 0
请按任意键继续. . .

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-03-22 19:14  熊浩清  阅读(916)  评论(1编辑  收藏  举报