變量名回顧: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; }
運行結果