簡體   English   中英

分配和獲取並集值,鍵入punning

[英]Assigning and getting union values, type punning

我有工會,好。
該聯合在結構內部,並且該聯合沒有這樣的名稱(類似)。

typedef enum TYPES {INT, FLOAT, CHAR, POINTER TO FUNCTION /* Please pay attention on this */};

typedef struct {
    TYPES type;
    union {
        int integer;
        float real;
        char letter;
        char *string;
        /* here we have a pointer to function syntax but I don't remember how to write it right now*/
    }
} MY_STRUCT;

我將以這種方式初始化我的結構。

MY_STRUCT test = {INT, 22};

好的,我知道這項工作是因為按照定義,當我使用這種初始化時,將使用並集的第一個字段。
所以問題是:
如果我這樣寫初始化會怎樣?

MY_STRUCT test = {INT, 22.2};

當我嘗試檢索浮點值后,我會得到正確的值嗎?

float var = (float)test.real;

這會顯示正確的事情嗎?
這適用於每種類型嗎? 連指針都用一個?

我之所以這樣問是因為按照定義,初始化將值放在我的並集的第一個字段中,因此,如果float大於int會出現問題嗎? 我不知道,所以,我知道有時函數的指針可能比int大,所以我需要將函數指針作為第一個成員寫成並集?

我讀到GCC支持類型校正,甚至Linux內核也使用類型校正。 因此,我僅擔心如果可以在該結構上使用這種初始化,然后獲得正確的值。

並集元素共享內存空間,整個並集使用“最大”元素所需的空間。 當您用22.2初始化時。 這表示使用fpoint IEEE 754的01000001101100011001100110011010。這取決於精度。 和你的

float var=(float) test.real

僅當您不更改初始化和此行之間的任何並集元素時,該選項才起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM