c语言关于引用&的使用

比较以下两个代码

(1)
#include
#include
void turn(int x, int y)//无引用
{
        int t;
        t = x;
        x = y;
        y = t;
}
int main()
{
    int a, b;
    scanf_s("%d%d", &a, &b);
    turn(a, b);
    printf("%d %d\n",a,b);
    system("pause");
    return 0;
}


(2)
#include
#include
void turn(int &x, int &y)//有引用
{
        int t;
        t = x;
        x = y;
        y = t;
}
int main()
{
    int a, b;
    scanf_s("%d%d", &a, &b);
    turn(a, b);
    printf("%d %d\n",a,b);
    system("pause");
    return 0;
}

 

结论: 
说白了引用&就是别名(你的小名,指的是同一个你),如果程序对引用做出改动,其实就是对目标的改动。 
当用执行语句trun(&a,&b)时,实参a和b的值发生了交换,如果turn函数的形参不用引用类型,这样调用时,由于c/c++采用实参到形参的单向值传递,所以实参a和b的值并不发生任何改变
--------------------- 
原文:https://blog.csdn.net/zwxlyg/article/details/72857547 

 

引用:引用是一个变量的另一个名字,又称别名。定义方式: 
int a=10; 
int &b=a;在这里,意思就是给a变量起了一个新名字b,因此b不可再次被重新定义。 
引用必须初始化,无空引用,并且引用不分等级。 
引用与指针的异同点: 
相同点:在引用中 int &b=a;这一句代码可被编译器看做int * const b=&a;//加上const的作用是表明指针b的自身的值(a的地址)不能改变,而指向的值(a的值)可以改变。也就是说引用相当于指针,引用与指针在编译时的方法一样,指向的都是变量的内存地址。 
不同点:1.在定义方式中引用储存的是值,而指针是一个变量的拷贝,存储的是地址。 
2.引用只能对已经存在的变量或对象实现引用,而指针则不需要,可以定义为空。 
3.在函数的传参中,如果传递的是一个引用,意味着这个变量或对象已经存在了;如果传递的是一个指针,则不能判断这个指针是不是有效的,是不是空的,因此在函数体 中大多数都得进行指针是否为空的判断。但是虽然引用较为安全,但是利用指针来传参效率较快。 
4.引用是直接访问变量,不用分配自己的内存空间,而指针是间接访问,需要定义,需要有自己的内存空间。 
例:交换函数swap()

void swap(int &a,int &b)
{
   int temp=a;
   a=b;
   b=temp;
}
void main()
{
   int x=10,y=20;
   swap(x,y);
}1234567891011

等价指针为:

 

void swap(int *const a,int *const b)
{
   int tmp=*a;
   *a=*b;
   *b=temp;
}
void main()
{
int x=10,y=20;
swap(&x,&y);
}
--------------------- 


原文:https://blog.csdn.net/wtzdedaima/article/details/78377201 
 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(C)