C语言中指针作为函数参数的问题。

#include "stdio.h"
void swap(int *p1,int *p2);
void main()
{
int *p1,*p2;
int a,b;
printf("Enter Numbers:\n");
scanf("%d%d",&a,&b);
p1=&a;
p2=&b;
if(a>b) swap(p1,p2);
printf("%d %d\n",a,b);
printf("%d %d\n",*p1,*p2);

}
void swap(int *p1,int *p2)
{ int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
上面程序中主函数传递的是地址,而void swap(int *p1,int *p2)是int *p1和int *p2啊??
swap() 中为什么是 int *p1 和int *p2 啊?*p1和*p2不是p1、p2指向的变量么!而主函数传递过来的是地址啊! 百思不得其解!= =!

没有任何错误啊!

p1,p2本来就是int*类型的,swap参数也是int*类型的, if(a>b) swap(p1,p2);这一句没错啊!swap本来就需要指针变量,p1,p2正好又是指针变量,直接写上去就可以了!

swap() 中是 int *p1 和int *p2这是因为这是swap的定义,既然是定义就要声明参数的类型,这里声明的是int*类型,那使用的时候就要传递int*类型的。主函数里的类型也是int*,对应上了,就可以了。

在定义变量的时候,建议你把*和数据类型当做一个整体,看成一种新的数据类型,不要把*和变量看做一个整体。比如int* p,int*是一个数据类型,p是变量名。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-12
O(∩_∩)O哈哈~。在函数声明和定义时Fun(int p1,int p2)是不是表示它的参数是两个int型的整数。Fun(int* p1,int* p2)则使表示它的参数是两个指针类型的。定义和声明时的变量只是代替符,其它的运算符号与类型符号加起来才是参数类型。你如果觉得不好理解,那么在写的时候就把int 和*放在一起(int*),这就是参数类型。本回答被提问者采纳
第2个回答  2011-09-26
更正以下楼主的问题补充,swap函数的两个参数,定义的时候,定义p1和p2,他们都int*类型的,也就是两个整型指针的类型。主函数传递进来的是a和b的地址,swap函数是将两个地址的值,也就是*p1和*p2交换,达到的效果是将两个地址上的值交换
第3个回答  2011-09-26
恩,int *p1 代表的不就是int a吗!!!!!不是一样的,程序没有错啊