易語言 取自定義資料型別的大小

2021-07-22 14:43:57 字數 992 閱讀 1970

先說一下易語言的變數儲存機制

易語言有基本資料型別和復合資料型別兩種

基本資料型別包括:1. 各種整數 2.各種浮點 3. 邏輯值

他們都是儲存在棧上的 大小都是固定的 用不著取

復合型別一般儲存在堆上 然後在棧上儲存堆上資料的引用

其中有幾種比較特殊:字串 位元組集 陣列

這兩種型別的大小雖然儲存在堆上的某個地方

但都有專門的取大小函式 直接呼叫即可

剩下就是自定義資料型別 比如類或者結構

特別是類 類的資料成員都是私有的

假如你想知道別人寫的乙個模組裡乙個類的大小

不可能通過數資料成員的方法得到

那如何取到呢?有人可能提出用「取變數位址」這個函式

可惜的是 「取變數位址」取到的永遠是棧上的位址

根據上面所說 棧上位址的內容就是堆上位址

但是易語言沒有乙個用指標取整數的函式

這就需要用乙個系統api:rtlmovememory

這個函式跟c語言memcpy的功能一樣 但是有了他問題就變得容易的多

宣告乙個整形變數a  q是乙個自定義的類或者結構

rtlmovememory (取變數位址 (a), 取變數位址 (q), 4)

這樣a儲存的就是ls在堆區的位址

之後用到乙個api:localsize

我們都知道堆區記憶體分配必然用到localalloc/globalalloc

那麼也能通過localsize取到大小

除錯輸出 (localsize (a))

之後這樣輸出的就是ls的大小

當然 相同的資料型別 大小肯定是不變的

每次需要的時候不用都取

取一次之後當常數用就好了

自定義資料型別

include include using namespace std typedef double weight,tall struct student int main cout for int i 0 i 4 i return 0 貼上正確的輸出 這裡tall和weight都是自己可以輸入的 ...

自定義的資料型別

c 中有一種資料型別稱為列舉 enumeration 型別,它允許使用者自己來定義一種資料型別,並列出該資料型別的取值範圍。定義列舉型別的語法格式為 enum 型別名 定義列舉常量的位置應該在程式首次使用該型別名之前,否則程式無法識別該型別。列舉型別中列出的常量稱為列舉常量,它並不是字串也不是數值,...

自定義資料型別 列舉型別

學習了乙個月c語言,卻從來沒有更新過部落格,沒有總結的學習是不完整的。好了,其實我是走c 方向的,就提前看了c 的有關內容。c 除了和c語言一樣常用的資料型別,他們還有允許使用者自己來設計的一些資料型別,比如列舉型資料,結構型資料和鍊錶。我就簡單的總結下列舉型別。列舉型別允許使用者自己來定義一種資料...