C语言学习之共用体(union)的运用

  • C语言中的共用体:
  • 伪代码表示:
c 复制代码
union 类型名{
数据类型1 成员1;
数据类型2 成员2;
数据类型3 成员3;
.
.
.
数据类型n 成员n;
};
  • 共用体的特点:
  • 1.所有的成员是共享同一块内存空间的
  • 2.所有成员的首地址是一样的;
  • 3.大小取决于共用体中最大的成员;
  • 补充知识:
  • 共用体清0:使用memset函数,头文件是string.h
  • memset函数格式:
c 复制代码
void *memset(void *s,int c,size_t n);
//功能:从指针s指向的地址开始,向后填充n个字节 c表示字符;
  • 测试代码:
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; 
}
  • 运行结果:
c 复制代码
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的存储方式是大端存储还是小端存储;
  • 关于大端和小端的存储方式,详见本人原创博客链接
c 复制代码
https://blog.csdn.net/qq_41878292/article/details/132248827?spm=1001.2014.3001.5502
  • 实例代码:
c 复制代码
#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;
}
  • 运行结果:
c 复制代码
该PC是小端存储
相关推荐
Ustinian_31019 分钟前
【C/C++】For 循环展开与性能优化【附代码讲解】
c语言·开发语言·c++
风和日丽 随波逐流24 分钟前
java17学习笔记
笔记·学习
牵牛老人29 分钟前
Qt 插件开发全解析:从接口定义,插件封装,插件调用到插件间的通信
开发语言·qt
钮钴禄·爱因斯晨32 分钟前
AIGC浪潮下,风靡全球的Mcp到底是什么?一文讲懂,技术小白都知道!!
开发语言·人工智能·深度学习·神经网络·生成对抗网络·aigc
22jimmy2 小时前
JavaWeb(二)CSS
java·开发语言·前端·css·入门·基础
机器视觉知识推荐、就业指导4 小时前
面试问题详解五:Qt 信号与槽的动态管理
开发语言·qt
四维碎片10 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio
IT码农-爱吃辣条10 小时前
Three.js 初级教程大全
开发语言·javascript·three.js
☺����11 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
月盈缺11 小时前
学习嵌入式的第二十二天——数据结构——双向链表
数据结构·学习·链表