2009年4月15日 星期三

C++ Reference Type

Reference Type
C++有個很獨特型態 Reference type
宣告方式跟指標很像

int i=10;
int &r=i;

他必須以變數來初始化,而且一定要初始化,否則會編譯不過


int &r;
int &r=100;

以上兩種方式都是不行的
這種宣告像是在替變數取別名

int i=10;
int &r=i;

兩者是同一個東西,只是名稱不同
不同於指標
如果是

int i=10;
int *r=&i;

此時r是指向i的記憶體位置,但是他本身是用另一塊記憶體位置

int i=10;
int &r=i;

而這時候,r跟i是共用同一塊記憶體位置



順便講講指標一種特殊的宣告方式

char a[3][4]={"abc","bcd","cde"};
char (*str)[4]=a;

其中 a是個二維陣列,內容已經被預先指派
因為[]的優先權高於* 所以在此用()將char*括起來先做
而str在此代表一個指標變數(是變數而不是陣列喔),他指向一個size為4的的字元陣列
原本char*的指標是指向size為1 byte的記憶體,str+1 一次只能跳一個byte的大小
但是透過這個步驟,讓原先的char*指標指向size為4 byte的記憶體大小,讓str+1變成可以一次跳4個byte
這就就有點像宣告成
char[4]* str;
但是並沒有這種語法,所以只是很像而已
上面程式碼就等效於

int* str=(int*)a; \\int 也是4個byte


如果是
char *str[4]
則str代表一個size為4的陣列,其內容為char*

沒有留言: