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*
沒有留言:
張貼留言