線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:899
推到 Plurk!
推到 Facebook!

關於關鍵字sizeof的問題

尚未結案
yinweli
一般會員


發表:3
回覆:5
積分:1
註冊:2003-10-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-21 09:36:15 IP:203.73.xxx.xxx 未訂閱
我的同事在查看別人寫的程式碼的時候, 發現了以下的程式碼 sizeof(&變數名, sizeof(型態)) 這跟我在Msdn上看到的不一致, 不過誇張的是這居然可以在VC 6.0上編譯通過.... 我並沒有在BCB上試過(手邊也沒有BCB), 請問各位大大, 這到底是怎麼一回事阿@@?
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-21 10:58:00 IP:219.84.xxx.xxx 未訂閱
你看錯ㄌ吧.應該是ZeroMemory(&變數名,sizeof(變數型態)) 把變數清空.
yinweli
一般會員


發表:3
回覆:5
積分:1
註冊:2003-10-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-21 12:00:18 IP:203.73.xxx.xxx 未訂閱
引言: 你看錯ㄌ吧.應該是ZeroMemory(&變數名,sizeof(變數型態)) 把變數清空.
沒有沒有, 我很確定我沒有看錯, 我後來還在VC 6.0上實驗了一次, 的確是可以編譯過的, 只是結果跟原來的sizeof使用方法出來的結果是一樣的
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-21 14:21:00 IP:219.84.xxx.xxx 未訂閱
yinweli:如果真如你所我說.是下sizeof(&變數名, sizeof(型態))這各程式碼 就很奇怪ㄌ.就是為什麼"結果跟原來的sizeof使用方法出來的結果是一樣的" 我舉各例來說吧
struct
{
 int         iTest[10];
 AnsiString  sTest[10];
}TestBase;    //sizeof(TestBase) 所得到ㄉ值是80
//sizeof(&TestBase,sizeof(TestBase)) 所得到的值會是4,因為sizeof的result 是 integer
如果方便的話.可否麻煩將.那一行指令POST出來. 彼此教學相長一下
yinweli
一般會員


發表:3
回覆:5
積分:1
註冊:2003-10-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-21 15:13:39 IP:203.73.xxx.xxx 未訂閱
引言: yinweli:如果真如你所我說.是下sizeof(&變數名, sizeof(型態))這各程式碼 就很奇怪ㄌ.就是為什麼"結果跟原來的sizeof使用方法出來的結果是一樣的" 我舉各例來說吧
struct
{
 int         iTest[10];
 AnsiString  sTest[10];
}TestBase;    //sizeof(TestBase) 所得到ㄉ值是80
//sizeof(&TestBase,sizeof(TestBase)) 所得到的值會是4,因為sizeof的result 是 integer
如果方便的話.可否麻煩將.那一行指令POST出來. 彼此教學相長一下 < face="Verdana, Arial, Helvetica"> 原來那部份的程式碼 RECT HP_RECT, m_Mp_Rect, SP_RECT, m_Sp_Rect, m_Fp_Rect; sizeof(&HP_RECT, sizeof(RECT)); sizeof(&m_Hp_Rect, sizeof(RECT)); sizeof(&MP_RECT, sizeof(RECT)); sizeof(&m_Mp_Rect, sizeof(RECT)); sizeof(&SP_RECT, sizeof(RECT)); sizeof(&m_Sp_Rect, sizeof(RECT)); sizeof(&SP_RECT, sizeof(RECT)); sizeof(&m_Fp_Rect, sizeof(RECT));
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-21 18:52:19 IP:219.84.xxx.xxx 未訂閱
引言: 原來那部份的程式碼 RECT HP_RECT, m_Mp_Rect, SP_RECT, m_Sp_Rect, m_Fp_Rect; sizeof(&HP_RECT, sizeof(RECT)); sizeof(&m_Hp_Rect, sizeof(RECT)); sizeof(&MP_RECT, sizeof(RECT)); sizeof(&m_Mp_Rect, sizeof(RECT)); sizeof(&SP_RECT, sizeof(RECT)); sizeof(&m_Sp_Rect, sizeof(RECT)); sizeof(&SP_RECT, sizeof(RECT)); sizeof(&m_Fp_Rect, sizeof(RECT));
請恕我才疏學淺.這幾行程式.好像沒什麼意義ㄌ.. 如果是要清空RECT變數的資料.語法好像也不是這樣. 如果要得到RECT的大小.語法好像也不是這樣. 真的很好玩...
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-21 19:59:03 IP:211.76.xxx.xxx 未訂閱
yinweli 您好:    經查詢BCB的確沒有sizeof(?,?);此函式。 不過如果您將它以#define巨集方式宣告,的確可騙過compiler喔! 或許是原程式設計者要產生一系列程式碼所用的巨集技巧吧! < class="code"> #define sizeof(x,y) (x) (y) //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage(IntToStr(sizeof(1,2))); } //--------------------------------------------------------------------------- RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/07/21 20:07:52
yinweli
一般會員


發表:3
回覆:5
積分:1
註冊:2003-10-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-22 09:10:10 IP:203.73.xxx.xxx 未訂閱
引言:
引言: 原來那部份的程式碼 RECT HP_RECT, m_Mp_Rect, SP_RECT, m_Sp_Rect, m_Fp_Rect; sizeof(&HP_RECT, sizeof(RECT)); sizeof(&m_Hp_Rect, sizeof(RECT)); sizeof(&MP_RECT, sizeof(RECT)); sizeof(&m_Mp_Rect, sizeof(RECT)); sizeof(&SP_RECT, sizeof(RECT)); sizeof(&m_Sp_Rect, sizeof(RECT)); sizeof(&SP_RECT, sizeof(RECT)); sizeof(&m_Fp_Rect, sizeof(RECT));
請恕我才疏學淺.這幾行程式.好像沒什麼意義ㄌ.. 如果是要清空RECT變數的資料.語法好像也不是這樣. 如果要得到RECT的大小.語法好像也不是這樣. 真的很好玩... < face="Verdana, Arial, Helvetica"> 最詭異的就是這裡了 這段程式碼是位於類別的建構子裡 這段程式碼結束 建構子就結束了 真的是很詭異阿...
yinweli
一般會員


發表:3
回覆:5
積分:1
註冊:2003-10-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-22 09:13:55 IP:203.73.xxx.xxx 未訂閱
引言: yinweli 您好: 經查詢BCB的確沒有sizeof(?,?);此函式。 不過如果您將它以#define巨集方式宣告,的確可騙過compiler喔! 或許是原程式設計者要產生一系列程式碼所用的巨集技巧吧! < class="code"> #define sizeof(x,y) (x) (y) //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage(IntToStr(sizeof(1,2))); } //--------------------------------------------------------------------------- RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/07/21 20:07:52
這我也想過...不過目前手上的程式碼中都沒有發現sizeof的巨集... 我想有可能是被包在Lib裡了吧 回頭我再去找找看
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-24 01:13:52 IP:218.169.xxx.xxx 未訂閱
不過sizeof(&HP_RECT, sizeof(RECT))是可以在BCB編譯的. 所以有可能不是自訂巨集.但不排除可能性. 如果不是自訂巨集.那就真很怪異ㄌ
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-07-24 03:47:48 IP:211.76.xxx.xxx 未訂閱
yinweli你好: sizeof可以接受多個參數型態。在多參數時,實作上是把sizeof當成一個函數,並且傳回空間最大參數的size值。這時用法和一般函數相同,不能傳給他type。(像sizeof(char,int)是不合法的。但sizeof(int)可以) 至於你提到的sizeof(Var1,sizeof(Type2))其實就等同於sizeof(Var1,size_t);其中的Type2是完全沒用的。因為裡面的單參數sizeof不論是什麼Type都是回傳一個size_t型態的大小值,之後就只被當成一個size_t的type來看。這個寫法應該是誤用吧?? 正確寫法應該是 sizeof(Var1,Type2()); 產生一個Type2的暫時變數,交給sizeof判斷。 發表人 - pwipwi 於 2004/07/24 03:50:52
系統時間:2024-06-26 9:38:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!