我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言的struct与union怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言的struct与union怎么使用

本文小编为大家详细介绍“C语言的struct与union怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的struct与union怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、struct 的小秘密

C语言中的 struct 可以看作变量的集合

struct 的问题:空结构体占用多大内存?下面编写程序看一下吧:

#include <stdio.h> struct TS{ }; int main(){    struct TS t1;    struct TS t2;        printf("sizeof(struct TS) = %d\n", sizeof(struct TS));    printf("sizeof(t1) = %d, &t1 = %p\n", sizeof(t1), &t1);    printf("sizeof(t2) = %d, &t2 = %p\n", sizeof(t2), &t2);        return 0;}

下面为输出结果,可以看到在 gcc 编译器中空结构体的大小就为0。

C语言的struct与union怎么使用

二、结构体与柔性数组

  • 柔性数组即数组大小待定的数组

  • C 语言中可以由结构体产生柔性数组

  • C 语言中结构体的最后一个元素可以是大小未知的数组

思考一下,下面的语句所占内存空间为多少呢,没错,就是 4。

C语言的struct与union怎么使用

SoftArray 中的 array 仅是一个待使用的标识符,不占用存储空间。

下面看一段柔型数组使用的代码:

#include<stdio.h>#include<malloc.h> struct SoftArray{    int len;    int array[];}; struct SoftArray* create_soft_array(int size){    struct SoftArray* ret = NULL;        if(size > 0)    {        ret = (struct SoftArray*)malloc(sizeof(struct SoftArray) + sizeof(int) * size);                ret->len = size;    }    return ret;} void delete_soft_array(struct SoftArray* sa){    free(sa);} void func(struct SoftArray* sa){    int i = 0;        if(NULL != sa)    {        for(i = 0; i < sa->len; i++)        {            sa->array[i] = i + 1;        }    }} int main(){    int i = 0;    struct SoftArray* sa = create_soft_array(10);        func(sa);        for(i = 0; i < sa->len; i++)    {        printf("%d\n",sa->array[i]);    }        delete_soft_array(sa);        return 0;}

下面为输出结果:

C语言的struct与union怎么使用

虽然 array[ ] 数组在定义的时候没有指定大小,但是可以在后面使用 malloc 函数来指定大小。柔性数组的好处就是 func() 函数有一个指向柔性数组的合法指针就行,不用传递要处理的数组大小。

三、C语言中的 union

  • C语言中的 union 在语法上与 struct 相似

  • union 只分配最大成员的空间,所有成员共享这个空间

如下:

C语言的struct与union怎么使用

union 的使用受系统大小端的影响

如下,就是定义的字面量常数 i 在大小端的存储位置:

C语言的struct与union怎么使用

小端模式下地址值存储低位数据,大段模式下低地址存储高位数据。

下面编写程序来判断一下系统的大小端:

#include <stdio.h> int system_mode(){    union SM    {        int i;        char c;    };     union SM sm;        sm.i = 1;        return sm.c;}  int main(){    printf("System Mode: %d\n", system_mode());    return 0;}

下面为输出结果:

C语言的struct与union怎么使用

所以说我的电脑系统是小端

读到这里,这篇“C语言的struct与union怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言的struct与union怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言的struct与union怎么使用

本文小编为大家详细介绍“C语言的struct与union怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的struct与union怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、struc
2023-06-30

C语言的union怎么使用

这篇文章主要介绍“C语言的union怎么使用”,在日常操作中,相信很多人在C语言的union怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的union怎么使用”的疑惑有所帮助!接下来,请跟着小编
2023-06-29

SQL中的union和union all怎么使用

这篇文章主要介绍了SQL中的union和union all怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL中的union和union all怎么使用文章都会有所收获,下面我们一起来看看吧。概念MyS
2023-03-01

C语言typedef struct怎么使用

在C语言中,typedef struct用于定义结构体类型并为其起一个别名。它的基本语法如下:```typedef struct {// 结构体成员data_type1 member1;data_type2 member2;...} ali
2023-08-09

sql中的union怎么使用

在SQL中,UNION是一种用于合并两个或多个SELECT语句结果集的操作符。使用UNION时,要求两个SELECT语句的列数和数据类型必须匹配。UNION的基本语法如下:```SELECT 列名 FROM 表1UNIONSELECT 列名
2023-09-12

c# union的使用方法是什么

在C#中,Union是一种数据结构,用于存储不同类型的数据。它允许在同一内存位置上存储不同类型的数据,并且只能同时使用其中一个数据成员。Union的使用方法如下:定义一个Union数据结构,可以使用关键字union或struct来定义。un
c# union的使用方法是什么
2024-03-15

C++的struct与class怎么用

本篇内容介绍了“C++的struct与class怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、类的关键字struct 在 C 语言
2023-06-30

C语言的struct结构体怎么创建

本篇内容主要讲解“C语言的struct结构体怎么创建”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言的struct结构体怎么创建”吧!一、本章重点创建结构体typedef与结构体的渊源匿名结
2023-06-30

C语言函数与宏怎么使用

这篇文章主要讲解了“C语言函数与宏怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言函数与宏怎么使用”吧!一、函数与宏宏是由预处理器直接替换展开的,编译器不知道宏的存在函数是由编译
2023-06-30

C语言语句与选择结构怎么使用

这篇文章主要介绍“C语言语句与选择结构怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言语句与选择结构怎么使用”文章能帮助大家解决问题。知识点1-语句1.1 语句1.表达式语句由一个表达式
2023-06-30

Go语言struct要使用tags的原因是什么

这篇文章主要介绍了Go语言struct要使用tags的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言struct要使用tags的原因是什么文章都会有所收获,下面我们一起来看看吧。struct
2023-07-05

C语言typedef怎么使用

typedef是C语言中的一个关键字,用于给已有的数据类型取一个新的名字。使用typedef关键字可以方便地定义新的数据类型,使代码更易读和理解。typedef的使用方法如下:1. 定义新的数据类型:```typedef int NewTy
2023-08-15

C语言seek_set怎么使用

在C语言中,`seek_set`用于将文件指针设置为文件的开头位置。`seek_set`函数的原型如下:```cint fseek(FILE *stream, long offset, int whence);```参数说明:- `stre
2023-08-09

C语言中scanf与scanf_s函数怎么使用

scanf函数和scanf_s函数都是用来从标准输入流中读取数据的函数,但是scanf_s函数是C11标准中新增的安全版本函数,目的是为了防止缓冲区溢出等安全问题。scanf函数的使用方法如下:```c#include int main()
2023-09-12

C语言OutputDebugString怎么使用

在C语言中使用OutputDebugString函数可以向调试器输出一条调试信息。首先,需要包含Windows.h头文件。然后,使用OutputDebugString函数可以输出调试信息。函数原型如下:```cvoid OutputDebu
2023-08-26

c语言static怎么使用

c 语言中的 static什么是 static?static 是 C 语言中的一个关键字,用于限制变量的作用域和生存期。如何使用 static?在变量声明前加上关键字 static,即可将变量声明为 static 变量。例如:st
c语言static怎么使用
2024-05-15

c语言goto语句怎么使用

C语言中的goto语句用于无条件地转移到程序中的标记位置。它的使用方式如下:1. 在程序中标记位置,语法为:```label:```其中,label为标记的名称,冒号表示标记的结束。2. 使用goto语句跳转到标记位置,语法为:```got
2023-08-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录