next up previous contents
Next: 實機練習題 Up: 結構與聯合 Previous: Union   Contents   DYWANG_HOME

存取 Union 成員

  1. 範例:無法同時存取 union 的成員。
    [dywang@dyw219 zzz]$ vim union2.c
    [dywang@dyw219 zzz]$ cat union2.c
    #include <stdio.h>
    #include <string.h>
    
    union Data {
    	int i;
    	float f;
    	char str[20];
    };
     
    int main () {
    	union Data data;
    	data.i = 10;
    	data.f = 220.5;
    	strcpy( data.str, "C Programming");
    
    	printf( "data.i : %d\n", data.i);
    	printf( "data.f : %f\n", data.f);
    	printf( "data.str : %s\n", data.str);
    
    	return 0;
    }
    
  2. 編譯
    [dywang@dyw219 zzz]$ gcc -o union2 union2.c
    
  3. 執行結果:設定 i=10, f=220.5, str="C Programming",但最後只有 str 輸出正確。
    data.i : 1917853763
    data.f : 4122360580327794860452759994368.000000
    data.str : C Programming
    
  4. 承上例:設定後先輸出,也就是一次存取 union 的一個成員。
    [dywang@dyw219 zzz]$ vim union3.c
    [dywang@dyw219 zzz]$ cat union3.c
    #include <stdio.h>
    #include <string.h>
    
    union Data {
    	int i;
    	float f;
    	char str[20];
    };
     
    int main () {
    	union Data data;
    
    	data.i = 10;
    	printf( "data.i : %d\n", data.i);
    
    	data.f = 220.5;
    	printf( "data.f : %f\n", data.f);
    
    	strcpy( data.str, "C Programming");
    	printf( "data.str : %s\n", data.str);
    
    	return 0;
    }
    
  5. 編譯
    [dywang@dyw219 zzz]$ gcc -o union3 union3.c
    
  6. 執行結果
    [dywang@dyw219 zzz]$ ./union3
    data.i : 10
    data.f : 220.500000
    data.str : C Programming
    



De-Yu Wang 2021-01-11