先說一下易語言的變數儲存機制
易語言有基本資料型別和復合資料型別兩種
基本資料型別包括: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語言一樣常用的資料型別,他們還有允許使用者自己來設計的一些資料型別,比如列舉型資料,結構型資料和鍊錶。我就簡單的總結下列舉型別。列舉型別允許使用者自己來定義一種資料...