本帖最後由 LoneGumMan 於 2013-4-4 01:47 編輯
請問 C++ 既 pointer 係 point 左去邊 ? 係想去另一個 function / address 定其他地方 ?
thanks ...
peterchu1 發表於 2013-4-3 17:37  其實冇話"point 左去邊". 首先你要理解O既係乜野叫做 variable.
(以下例子暫時放開 stack vs heap allocation 唔理住)
用一個傳統O既例子. 你可以想像你個PROGRAM O既MEMORY SPACE 係一堆locker , 好似公眾泳池果D. 每當你 declare 一個 variable, 你可以想像你要用一個或以上O既locker去放野(視乎你要放幾多, char / bool 最細, 一格就得, short 大D, 兩格, int 四格,etc). 假設locker 係 2D grid, 好似EXCEL 咁可以 A11, B23 咁去reference, 咁個 char 就可能係放響 A13, 個 int variable 可能係 D11,D12,D13,D14
char c = 'x'; // c o既address 係 A13
int i = 12345; // i o既address 係 D11 - 14
一個pointer variable 就係一個儲住個 Address o既 variable.
char* cp = &c; // cp = A13
int* ip = &i; // ip = D11
當你用一個 int pointer o既時候, compiler 知道 int 係 4 格咁大 (佢知道所有 type O既 exact size), 所以當你 de-reference 一個 int pointer o既時候, 佢就會識得讀番 D11 - 14 俾你;
char c2 = *cp; // c2 = 'x'
int i2 = *ip; // i2 = 12345
有師兄提到pass-by-value / pass-by-reference, 順帶解釋埋. 響 C / C++ 裏面, 當你 call function o既時候, parameter default 係pass-by-value o既, 即係compiler 會gen code 幫你做一個copy俾function 用. 大部份時候咁樣都OK, 但係如果你想個function幫你改個 variable o既value 又點呢? 唔WORK, 因為佢可以改到o既只係一個COPY.
簡單例子 (少少syntax錯,唔理):- void func (int yy) {
- yy = yy + 1;
- }
- ....
- int main () {
- int yy = 10;
- func ( yy );
- cout << "yy = " << yy << endl;
- }
複製代碼 當你最後 print yy o既時候, 出黎仍然係 10, 因為function 改果個係個 "copy of caller's yy".
要人地改到你O既value, 最簡單就係話俾人知個locker (memory location!) 等人地直接寫:- void func (int* yy) {
- *yy = *yy + 1;
- }
- ....
- int main () {
- int yy = 10;
- func ( &yy );
- cout << "yy = " << yy << endl;
- }
複製代碼 今次, yy 係11, 因為人地知道真正O既memory address, 可以de-reference去改.
以上O既寫法係 C. C++ 可以有一個靚仔D O既寫法, reference- void func (int& xx) {
- xx = xx + 1;
- }
- ....
- int main () {
- int yy = 10;
- func ( yy );
- cout << "yy = " << yy << endl;
- }
複製代碼 今次冇晒D 星星, 因為 xx 係一個"reference to int", 可以諗成為一個 "代號" (我唔知中文書叫佢做乜野 :p) compiler 知道 "xx" 其實即係 caller o既 yy; 如果你改 xx 即係直接改 yy
仲有其他 const reference 之類O既野, 你慢慢睇下會明 |