[英]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.