C++基礎——普通引用

變量名回顧:ios

 變量名實質上是一段連續存儲空間的別名,是一個標號(門牌號)函數

 程序中經過變量來申請並命名內存空間spa

 經過變量的名字能夠使用內存空間code

問題1:對一段連續的內存空間只能取一個別名嗎?blog

 

1. 引用的概念內存

a)  在C++中新增長了引用的概念編譯器

b)  引用能夠看做一個已定義變量的別名io

c)   引用的語法:Type& name = var;編譯

d)  引用作函數參數呢?(引用作函數參數聲明時不進行初始化) class

引用屬於C++編譯器對C的擴展,不能用C語言的語法去思考它。

普通引用 必需要初始化

#include <iostream>
using namespace std;

//引用的概念
int main(void)
{
    int a=10;
    
    //引用的語法:Type& name = var;
    int &b=a; //int *const b=&a;
    b=100; //至關於把a修改爲100
        //*b=100;
    printf("b:%d\n",b);
    printf("a:%d\n",a);
    
    a=200;
    printf("b:%d\n",b);
    printf("a:%d\n",a);    
    
    return 0;
}

 運行結果爲 

a和b共用一個內存空間。

 

void myswap01(int a, int b)
{
    int c=0;
    c=a;
    a=b;
    b=c;
}

void myswap02(int *a, int *b)
{
    int c=0;
    c=*a;
    *a=*b;
    *b=c;
}
void myswap03(int &a, int &b)
{
    int c=0;
    c=a;
    a=b;
    b=c;
}

int main(void)
{
    int x=10;
    int y=20;
    
    myswap01(x,y);
    printf("x:%d\n",x);
    printf("y:%d\n",y);    
    
    myswap02(&x,&y);
    printf("x:%d\n",x);
    printf("y:%d\n",y);    
    
    myswap03(x,y);
    printf("x:%d\n",x);
    printf("y:%d\n",y);    
    
    return 0;
}

myswap01函數實現不了交換,改變的是形參,只是一份拷貝;

myswap02函數傳遞的是x,y的地址,改變的仍是x,y的自己。故能實現交換;

myswap03函數改變的是x,y的一個別名,實際改變的仍是x,y。故能實現交換。

 

複雜數據類型作函數引用

//複雜數據類型的引用
struct Teacher
{
    char name[64];
    int age;
};
void printfT(Teacher *pT)
{
    cout<<pT->age<<endl;
}

//pT是t1的別名,至關於修改了t1
void printfT01(Teacher &pT)
{
    pT.age=33;
    cout<<pT.age<<endl;
}

void printfT02(Teacher pT)
{
    cout<<pT.age<<endl;
    pT.age=40;  //只會修改pT變量,不會修改t1變量
}

int main(void)
{
    Teacher t1;
    t1.age=35;
    printfT(&t1);
    cout<<t1.age<<endl;
    
    printfT01(t1);
    cout<<t1.age<<endl;
    
    printfT02(t1);
    cout<<t1.age<<endl;
    
    cout<<"hello...."<<endl;
}

運行結果

相關文章
相關標籤/搜索