C语言引用&的个人理解

时间:2021-11-01 16:23:11
因为我学艺不精,所以有时候交换值函数时有时候会写成下面这样
int main(int argc, const char * argv[]) {
// insert code here...

int x = 3;
int y = 5;
Swap(&x,&y);
cout<<x<<endl;
cout<<y<<endl;

return 0;
}

void Swap(int *a,int *b){
int *temp;
temp = a;
a = b;
b = temp;
}
很明显,这样的结果肯定是错的,因为a和b只是形参,交换两个地址对主函数的x和y并没有什么作用,甚至连x和y的地址都不会改变。如果一定要用指针作为参数,可以像下面这样,交换a和b指向的值,可是这样和不用指针也没啥区别了。
void Swap(int *a,int *b){    int temp;    temp = *a;    *a = *b;    *b = temp;}
而C++里面有个概念叫引用变量,也就是为原变量起一个别名,使用情况像下面这样
int main(int argc, const char * argv[]) {    // insert code here...        int x = 3;    int y = 5;    swap(x, y);    cout<<x<<endl;    cout<<y<<endl;        return 0;}void swap(int &x,int &y){    int temp;    temp = x;    x = y;    y = temp;}

这样就能够成功交换x和y的值。

为什么会有不同的效果呢,按照我个人的理解是,上面的局部变量a和b只是相当于新建一个指向x和y的指针,只是交换a和b指针地址的值并不能改变x和y的地址的指向,所以x和y的值还是没有改变。

而采用引用的话,实际上就是创建一个指针指向主题函数中的x和y,然后在操作的就是这个指针指向的值。这样才能改变主体函数中x和y的值。

以上仅仅是个人的理解,方便自己理解代码,也有可能实际并不是我想的这样,仅供参考!