1.为了交换a和b的值,将a,b的地址作为函数参数传递
2.实例代码:
#include <iostream>
using namespace std;
//指针变量作为函数参数的例子
void swap(int *m, int *n) //*m,*n,不是指针所指向的值
{
int temp;
temp = *m;
*m = *n;
*n =temp;
}
int main()
{
int a=5, b=10;
cout<<"a="<<a<<" b= "<<b<<endl;
cout<<"&a的地址 "<<&a<<endl;
cout<<"&b的地址 "<<&b<<endl;
swap(&a, &b);
cout<<"a="<<a<<" b= "<<b<<endl;
cout<<"&a的地址 "<<&a<<endl;
cout<<"&b的地址 "<<&b<<endl;
}
运行结果代码:
a=5 b= 10
&a的地址 0x28fefc
&b的地址 0x28fef8
a=10 b= 5
&a的地址 0x28fefc
&b的地址 0x28fef8
3.主要的问题,main()
函数中引用swap()
中传的参数是该变量对应的地址,而swap()
函数中却是用(int *m, int *n)
来接受的,不是特别明白,最后的地址也没有交换,只是交换了地址对应的值。
4.希望可以帮忙解决本问题,并在本问题的基础上,对于我认识的地址和指针的概念一些拓展,或者推荐相关的优秀的文章的url
,提前谢谢。
伊谢尔伦2017-04-17 14:53:22
指標也是變量,儲存的是變數的位址。用變數或變數的指標都可以存取變數。你需要交換變數的值,需要傳址,僅傳值是做不到的。另外,《C和指針》這本書還可以。
黄舟2017-04-17 14:53:22
首先,請把參數寫成int* m
,型別是int*
。
位址是不會交換的,因為位址是變數值的所在地。因為m
和n
是指標變量,它們存的是位址。 *m
是取出m
儲存的位址所指向的值。所以是*m
和*n
互換了,而不是m
和n
互換了。