C言語学習におけるUnionの応用

  • C 言語の共用体:
  • 疑似コードは次のように言います:
union 类型名{
    
    
数据类型1 成员1;
数据类型2 成员2;
数据类型3 成员3;
.
.
.
数据类型n 成员n;
};
  • 共通の機能:
  • 1. すべてのメンバーが同じメモリ空間を共有します
  • 2. すべてのメンバーの最初の住所は同じです。
  • 3. サイズは、共用体の最大のメンバーによって異なります。
  • 補足知識:
  • 共用体清0: memset 関数を使用します。ヘッダー ファイルはstring.h;
  • memset関数の形式:
void *memset(void *s,int c,size_t n);
//功能:从指针s指向的地址开始,向后填充n个字节 c表示字符;
  • テストコード:
#include<stdio.h>
#include<string.h>

union Test{
    
    
    char a;
    short b; 
    int c;
    long d;
    long long e;
};

int main(int argc, const char *argv[]){
    
    
	
	
    union Test k;
    printf("sizeof(k) = %lld\n",sizeof(k));
    
    memset(&k,0,sizeof(k));
    k.a = 220;
    printf("k.b = %d\n",k.b);
    printf("k.c = %d\n",k.c);
    printf("k.d = %ld\n",k.d);
    printf("k.e = %lld\n",k.e);
    
    puts("--------------------------");
    
    printf("&k.a = %p\n",&k.a);
    printf("&k.b = %p\n",&k.b);
    printf("&k.c = %p\n",&k.c);
    printf("&k.d = %p\n",&k.d);
    printf("&k.e = %p\n",&k.e);
    return 0; 
}

  • 操作結果:
sizeof(k) = 8
k.b = 220
k.c = 220
k.d = 220
k.e = 220
--------------------------
&k.a = 000000000062FE10
&k.b = 000000000062FE10
&k.c = 000000000062FE10
&k.d = 000000000062FE10
&k.e = 000000000062FE10
  • インスタンスの要件:
  • 共用体 (ユニオン) を使用して、PC のストレージ モードがビッグ エンディアン ストレージであるかリトル エンディアン ストレージであるかを決定します。
  • ビッグエンディアンとリトルエンディアンの保存方法の詳細については、私のオリジナルのブログを参照してください链接
https://blog.csdn.net/qq_41878292/article/details/132248827?spm=1001.2014.3001.5502
  • コード例:
#include <stdio.h>

union Test{
    
    
    char a;
    int  b;
};

int main(int argc, const char *argv[]){
    
    
	
	
    union Test k;
    
    k.b = 0x12345678;
    if (0x78 == k.a) {
    
    
        printf("该PC是小端存储\n");
    } else {
    
    
        printf("该PC是大端存储\n");
    }
    return 0;
}
  • 操作結果:
该PC是小端存储

おすすめ

転載: blog.csdn.net/qq_41878292/article/details/132461264