指针变量作为参数,为何函数被调用时参数是指针?

int main()
{
int *pointer_1,*pointer_2;
省略。。。
pointer_1=&a;
pointer_2=&b;
swap(pointer_1,pointer_2);//为什么是指针的格式??
return 0;
}
void swap(int *p1,int *p2)
{
}
SWAP函数的参数是指针变量,为什么调用它的时候参数变为了指针,不也应该是指针变量的形式么?
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
return 0;
}

第1个回答  2013-04-07
指针传参的时候传的是指针本身的地址。不是传他指向的数追问

那比如说*pointer_1的值是5,pointer_1的值是2000(也就是变量的地址)
在swap函数中的*p1不也应该是5么,传入2000的参数不就不对了?(它会自动解析出该地址的变量值?)

追答

如果你传的是*p1,你只是传了他指向的5,但是函数运行结束后
P地址还是2000,,2000指向的还是5,那你运行这个函数就没有任何意义。

追问

那简单的理解,SWAP函数虽然参数是指针变量,但是调用的时候参数用指针是合法的是么?

追答

不是合法的。如果形参是(int p1, int p2);你可以传递*pointer_1,*pointer_1是int型的
如果是(int *p1, int *p2),你要传递pointer_1,pointer_1是指向int的指针,而这里的形参并不是int,而是指向int的指针。
不要看int *p1,就觉得这是个int型

本回答被提问者采纳
第2个回答  2013-04-07
指针传的是地址,不是实际的数据追问

那比如说*pointer_1的值是5,pointer_1的值是2000(也就是变量的地址)
在swap函数中的*p1不也应该是5么,传入2000的参数不就不对了?(它会自动解析出该地址的变量值?)

追答

你是想将pointer_1地址的值和pointer_2地址的值都改变是吗?如果你传过去的是指针的地址是可以改变的,如果是具体的值是改变不了的。

相似回答