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吗!!!!!不是一样的,程序没有错啊

C语言函数里的参数是指针的问题
函数定义和函数调用是两个概念,函数定义 为f(int *arr),表示参数是一个整型指针,因此使用该函数时要传递一个地址,如变量int a=0; 调用函数f传递a的地址时需要写为f(&a);而对于数组来说,如int b[]=[1,2,3], b本身就是数组首元素的地址,因此调用函数f传递数组首地址需要写为f(b)。

C语言指针作函数参数时的返回问题
进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。swap(int *p1,int *p2)函数首先创建两个空间,是指针,再把实参复制过来,即p1=pointer_1=&a,p2=pointer_2=&b,改变p1,p2就分别指向了a,b.改变p1指向的值就是改变了a。...

c语言指针和函数的问题
在C语言中,值传递是唯一可用的参数传递机制。但是据笔者所知,由于受指针变量作为函数参数的影响,有许多朋友还认为这种情况是引用传递。这是错误的。请看下面的代码:int swap(int *x, int *y){int temp;temp = *x; *x = *y; *y = temp;return temp;}void main(){int a = 1, b = 2;int *p1 ...

c语言中函数指针作为参数与函数的嵌套
您好,针对这个问题 Status InOrderTraverse(BiTree T ,Status(*Visit)(TElemType e))函数中第2个参数是一个指向函数的指针,这样做的目的是为了程序的灵活性。试想如果给你一个整型数100,要求分别按照10进行、16进制输出,你可以写一个输出10进制函数与输出16进制函数,当你有需要输出16进制时,只需...

为什么C语言函数传参数的时候要传指针?
代码在编译时会出现 error C2664: 'InsertSort' : cannot convert parameter 1 from 'int' to 'int []'这是因为用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址,因此对参数的类型做一下改变,如下图所示:

在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回 ...
C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。C++传引用函数:void foo(int& a) { a = 3; } 假如a = 2,执行foo(a)后,a = 3。--- C语言可以模拟传引用,方法是通过指针来实现:void foo2(int* ap) { *ap = 3; } 假如a = 2...

求C语言错误分析,指针做函数参数
int i,j,k,*p1[5]={p,p,p,p,p};你定义了一个指针数组,但后边用的时候p1[0],p[1]等都是一样的啊,都为p,不太理解 所以我帮你重新写了一个 void s(int *p){ int temp;\/\/把四个最小值先放在前四个位置中 for (int i=0;i<4;i++){ for (int j=i+1;j<25;j++){ ...

C语言,使用指针作为函数参数,写一求数组中最大值和最小指的函数
*n=arry[1];for(inti=0;i<size;i++){ if(arry[i]>*m)*m=arry[i];if(arry[i]<*n)*n=arry[i];} } intmain(intargc,constchar*argv[]){。inta[]={1,5,6,2,3,8,9,7,4,5};//定义一个十个数据的数组 intmax;//存放...

C语言指针作为函数参数,返回值为0
return *p; \/\/返回指针p指向的地址}int main(){ double *p=... \/\/初始化指针p double *q; \/\/用于接收改变的指针 ... q=a(&p); \/\/将指针p的地址传递给a ... return 0;} 如果是用作dll的话,那么你应该使用和相应语言兼容的类型才行 ...

c语言求解 指针变量作为函数参数为什么用void 定义而且不用返回值就能...
这个很容易理解,指针变量保存的是地址信息,*p这个是取p指针保存的地址里面的值,更改的也是保持的地址里面的值。而函数中传递的是变量的拷贝,比如指针传递的就是他保存的地址 如果在函数中对他保存的地址改掉,那么是不影响主函数中的变量的 错误的原因是scanf中是用英文的逗号,而你输入的是中文的...

相似回答