關於TryStrToInt和TryStrToFloat |
尚未結案
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
GGL
資深會員 發表:104 回覆:600 積分:335 註冊:2006-11-05 發送簡訊給我 |
|
psl
一般會員 發表:6 回覆:30 積分:7 註冊:2003-06-11 發送簡訊給我 |
gmobug 你好:
這個函數 TryStrToInt(AnsiString S, int & Value) 裡
第二個參數的意思是 '傳參考' [pass by reference]
其實他是取那個參數的位址傳進去的
從以下的反組譯程式碼就可以知道了
Unit1.cpp.13: int i=0; 00401414 33D2 xor edx,edx 00401416 8955D4 mov [ebp-0x2c],edx ebp-0x2c 就是區域變數 i 的位址 所以 mov [ebp-0x2c],edx 就是把 0 填入 i (edx已再上一行清為零了) Unit1.cpp.14: bool a = TryStrToInt(as, i); 00401419 8D55D4 lea edx,[ebp-0x2c] <-- (就是這一行 取 i 的位址到 edx) 0040141C 8B45FC mov eax,[ebp-0x04] <-- (ebp-0x04 是那個 as 的位址) 0040141F E8E80E0000 call Sysutils::TryStrToInt(const System::AnsiString,int &) 00401424 8845D3 mov [ebp-0x2d],al可以看到 BCB/Delphi 參數都盡量用 register 傳 ^_^ 傳參考跟傳指標的差異 以下是一種狀況 void Swap(int* a, int* b) { int c; c = *a; *a = *b; *b = c; }; void Swap(int& a, int& b) { int c; c = a; a = b; b = c; };第一種要這樣用 Swap( &x, &y ); 第二種要這樣用 Swap( x, y ); 有沒有感覺第二種寫法程式碼比較清爽 ^_^ 可以其他參考C 的書籍應該都會有詳細的解釋的 |
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
psl
一般會員 發表:6 回覆:30 積分:7 註冊:2003-06-11 發送簡訊給我 |
gmobug 你好 > 那如果我要寫一個可以這樣的函式是否就向那樣宣告 int & value呢? 在 C++ 裡本來就可以這樣用 請不用客氣 ^_^ > 對了C底下可以這樣做嗎 在 C 裡面似乎沒有 pass by reference
下面是我查到的連結 給你參考一下
http://www.eskimo.com/~scs/C-faq/q4.11.html (1995 年 -_-a)
語言大都有在演進 不知最新的 C 標準有沒有加進什麼元素 C++ 裡 reference 的一個重要用途是有效實作出 operator overload
如果用 pointer 來實作 overload "+" 這個運算子
Matrix operator ( Matrix *m1, Matrix *m2 ) { Matrix result; // do the computation in result return result; }使用時要這樣 兩個相加 &a &b 三個相加 &(&a &b) &c 你會不會感覺很 orz 但是如果我用 reference 來實作 Matrix operator ( const Matrix &m1, const Matrix &m2 ) { Matrix result; // do the computation in result return result; }就可以這樣用 兩個相加 a b 三個相加 a b c 寫程式不再 orz 了 詳細說明可以參考任何一本 "好的" > |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |