union關鍵字和取類成員函式位址的方法

2021-06-19 09:30:42 字數 988 閱讀 8609

union關鍵字

union 維護足夠的空間來置放多個資料成員中的「一種」,而不是為每乙個資料成員配置空間,在union 中所有的資料成員共用乙個空間,同一時間只能儲存其中乙個資料成員,所有的資料成員具有

unionstatemachine

addr;

特性:1、所有資料成員中共享乙個位址。

這個union中最長的變數型別是double,所以整個union占用的空間是double占用的空間。

sizeof

(addr)返回8。即整個union的長度是8。

2、乙個union變數只能有標識多個資料成員的一種。

addr.number輸出是0,因為此時union空間裡裝的是double exp。實際上,number的輸出是double exp的低位(小端)。

可以通過union做一些有趣的事。

1.大端小端的判斷。

大端小段的判斷,列印1就是小端。

#include

usingnamespacestd;

intmain()addr;

addr.a=1;

cout<

2.取類成員函式位址(取自thunk技術的一部分)

typedefvoid(_stdcallcbuttondemobho::*tmfp)();

//union巧取成員變數位址

union  addr;

addr.method =(tmfp)&cbuttondemobho::pagescaner;

union addr;

這裡addr.func的值就是類成員函式的位址。因為成員函式是乙個獨有的型別,不能強制轉換,所以用union逃避型別檢查。

const成員函式和mutable關鍵字

一 const成員函式 class myclass public void fun const private int m nvalue const成員函式內不能修改成員變數的值,也不能呼叫非const成員函式。const物件只能呼叫const成員函式。二 mutable關鍵字 class mycl...

C語言union關鍵字

union 關鍵字的用法與struct 的用法非常類似。union 維護足夠的空間來置放多個資料成員中的 一種 而不是為每乙個資料成員配置空間,在union 中所有的資料成員共用乙個空間,同一時間只能儲存其中乙個資料成員,所有的資料成員具有相同的起始位址。例子如下 union statemachin...

C語言union關鍵字

今天看union,不是很記得其作用了。本文摘自c語言中文網,解釋的很好,學到了東西。union 維護足夠的空間來置放多個資料成員中的 一種 而不是為每乙個資料成員配置空間,在union 中所有的資料成員共用乙個空間,同一時間只能儲存其中乙個資料成員,所有的資料成員具有相同的起始位址。例子如下 uni...