'型別轉換': 基本上就只是在變數/函數前面加一對小括號, 中間填入要轉成什麼型別, 像這個樣子 "(型別)", 例如:
(unsigned char *)ptr
看不出哪一點難, 對吧

不過在實際運用上, 經常會有其他運算元的干擾, 使我們不容易看出式子的意義, 因此我自己寫了二個 macro, 使用上還算方便清楚.

  • 第一個巨集是讀取用的, 也就是把 dstPtr 轉成 sourType 的指標, 並讀出內容來.
  • 第二個巨集則是寫入用的, 也就是把 sour 存入 dstPtr 所指向的位址.

#define getcast(dstPtr, sourType)          *((sourType*)(dstPtr))
#define cpycast(dstPtr, sourType, sour)   {*((sourType*)(dstPtr)) = sour; }

這二個巨集中的第一個參數 dstPtr 是一個指標(什麼樣的指標無所謂), 第二個參數 sourType 則是希望把它轉成什麼 "型別" 的指標來存/取資料, 而 sour 則是來源資料.

要注意的是: 如果你的 sour 是指標而不是常數或者是變數, 而你希望轉換的不是指標本身而是指標所指向的變數, 那就要自行加上一個取值的動作 (*), 當然 sourType 要帶取值後的型別.

這二個巨集可以換另一種寫法

#define getcast(dptr, stype)          ((stype*)(dptr))[0]
#define cpycast(dptr, stype, sour)   {((stype*)(dptr))[0] = sour; }

這二種寫法功能上都一樣, 個人用到目前為止也都沒有出現過什麼問題.


相關文章:

arrow
arrow
    文章標籤
    C 語言 指標 型別轉換
    全站熱搜

    MagicJackTing 發表在 痞客邦 留言(0) 人氣()