如何取得動態矩陣的大小? |
尚未結案
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
|
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
應該沒有辦法得到大小,傳入為指標的話,就算用超過,編譯器也不會理你.
所以才會一般傳入時還必需多一個Size傳入,像下面這個Win32 SDK的宣告.
DWORD GetPrivateProfileString( LPCTSTR lpAppName, // points to section name LPCTSTR lpKeyName, // points to key name LPCTSTR lpDefault, // points to default string LPTSTR lpReturnedString, // points to destination buffer DWORD nSize, // size of destination buffer LPCTSTR lpFileName // points to initialization filename );因此,要完成他只能像下面這樣 int func(int *a,int Size) { for (int i=0;i |
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
引言: 您好: 應該沒有辦法得到大小,傳入為指標的話,就算用超過,編譯器也不會理你. 所以才會一般傳入時還必需多一個Size傳入,像下面這個Win32 SDK的宣告.既然用malloc配置的記憶體可以用_msize來得到矩陣的size,那不是比用傳參數進去還要來得方便嗎?但為什麼大部份的API卻都還是選擇用傳參數大小的方法來建立函數呢?DWORD GetPrivateProfileString( LPCTSTR lpAppName, // points to section name LPCTSTR lpKeyName, // points to key name LPCTSTR lpDefault, // points to default string LPTSTR lpReturnedString, // points to destination buffer DWORD nSize, // size of destination buffer LPCTSTR lpFileName // points to initialization filename );因此,要完成他只能像下面這樣int func(int *a,int Size) { for (int i=0;i |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
hornacek 您好: 如果您真的需要計算陣列的大小的話,底下程式碼可以試試!
int func(int *a) { // 想在此取得 a 的大小 10,回傳 a 的大小 10 int size = _msize(a) / sizeof(a[0]); return (size); }不過您提出了個有趣的問題,使用 _msize(.) 。 1.經查BCB線上說明,對該函式的描述,讓人有點失望! 該函式僅存在win32,可攜性低;還有傳回值可能會大一些。 2.我嘗試在Windows與console mode下分別測試一下發現, 在Windows mode下會多出 4 bytes,console mode 則正常。 或許需要更多的測試來找出真正的規則。不過可攜性低與傳回值不盡相同的狀況下,使用者將失去對該函式的信任! RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
API會要您輸入大小主要應該是相容性與效率.
您想想看,如果您是使用New所配置的出來的計憶體,傳入API中,但他卻又不接受,那是否作業系統必需另外在提供那樣的函數,而如果他能在函數內幫您處理這些計憶體,那函數效率不是下降了,您如果有用過Delphi就可以感覺到,Delphi在計憶體與與資料型態都會嚴格限制,而BCB卻不管您怎麼使用,因此編譯時編譯器檢查東檢查西的,造成Delphi與BCB的編譯速度差距甚大. 想想看,如果Windows Api是您寫的,您會怎麼去寫那些函數. 發表人 - supman 於 2005/04/26 00:33:29
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |