iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言详细分析讲解struct与union使用方法
  • 470
分享到

C语言详细分析讲解struct与union使用方法

2024-04-02 19:04:59 470人浏览 独家记忆
摘要

目录一、struct 的小秘密二、结构体与柔性数组三、C语言中的 uNIOn四、小结一、struct 的小秘密 C语言中的 struct 可以看作变量的集合 struct

一、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 语言中可以由结构体产生柔性数组
  • C 语言中结构体的最后一个元素可以是大小未知的数组

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

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;
}

下面为输出结果:

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

三、C语言中的 union

  • C语言中的 union 在语法上与 struct 相似
  • union 只分配最大成员的空间,所有成员共享这个空间

如下:

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

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

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

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

#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;
}

下面为输出结果:

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

四、小结

  • struct 中的每个数据成员有独立的存储空间
  • struct 可以通过最后的数组标识符产生柔性数组
  • union 中的所有数据成员共享同一个存储空间
  • union 的使用会受到系统大小端的影响

到此这篇关于C语言详细分析讲解struct与union使用方法的文章就介绍到这了,更多相关C语言 struct与union内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言详细分析讲解struct与union使用方法

本文链接: https://www.lsjlt.com/news/146581.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C语言详细分析讲解struct与union使用方法
    目录一、struct 的小秘密二、结构体与柔性数组三、C语言中的 union四、小结一、struct 的小秘密 C语言中的 struct 可以看作变量的集合 struct ...
    99+
    2024-04-02
  • C语言的struct与union怎么使用
    本文小编为大家详细介绍“C语言的struct与union怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的struct与union怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-30
  • C语言 联合(union)用法案例详解
    联合(union)的声明和结构与结构体类似,但是本质不同。    联合的所有成员引用的是内存中的相同位置。当你想在不同时刻把不同的东西存储于同一位置时,...
    99+
    2024-04-02
  • C语言 struct结构体超详细讲解
    目录一、本章重点二、创建结构体三、typedef与结构体的渊源四、匿名结构体五、结构体大小六、结构体指针七、其他一、本章重点 创建结构体typedef与结构体的渊源匿名结构体结构体大...
    99+
    2024-04-02
  • C语言结构体(struct)的详细讲解
    目录引言1. 动态内存管理2. 结构体2.1 定义语法2.2 定义示例2.3 初始化2.4 结构体赋值2.5 结构体数组2.6 结构体指针赋值3. 学生管理系统附:结构体变量的存储原...
    99+
    2024-04-02
  • C语言详细讲解#pragma的使用方法
    目录一、#pragma 简介二、#pragma message三、#pragma once四、#pragma pack五、小结一、#pragma 简介 #pragma 用于指示编译器...
    99+
    2024-04-02
  • C语言 详细讲解#pragma的使用方法
    #pragma是C语言中的预处理指令,用于告诉编译器在编译过程中采取特定的行为。以下是#pragma的使用方法的详细讲解:1. #p...
    99+
    2023-08-08
    C语言
  • C语言详细分析讲解关键字const与volatile的用法
    目录一、const 只读变量二、const 全局变量的分歧三、const 的本质四、const 修饰函数参数和返回值五、volatile 解析六、小结一、const 只读变量 con...
    99+
    2024-04-02
  • C语言中枚举与联合体的使用方法(enum union)
    目录enum的定义 enum对比#define宏常量的好处 union的定义 联合体大小的计算 联合体配合算大小端的问题 总结enum的定义 枚举顾名思义就是一一列举,把...
    99+
    2024-04-02
  • C语言详细分析讲解流程控制语句用法
    目录一、分支语句1.if语句2.switch语句二、循环语句1.for语句2.break和continue语句3.循环嵌套4.while和do…while语句一、分支语...
    99+
    2024-04-02
  • C语言详细讲解二分查找用法
    目录【力扣题号】704.二分查找 力扣题目链接 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9     输出:...
    99+
    2024-04-02
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法
    目录一、枚举类型的使用方法二、sizeof 关键字的用法三、typedef 的意义四、小结一、枚举类型的使用方法 enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自...
    99+
    2024-04-02
  • C语言详细分析讲解关键字goto与void的作用
    目录一、关于goto二、void 的意义三、小结一、关于goto 高手潜规则:禁用 goto项目经验:程序质量与 goto 的出现次数成反比最后的判决:将 goto 打入冷宫 下面看...
    99+
    2024-04-02
  • C语言详细讲解#error与#line如何使用
    目录一、#error 的用法二、#line 的用法三、小结一、#error 的用法 #error 用于生成一个编译错误消息 用法 #error message,message不需要用...
    99+
    2024-04-02
  • C++stack与queue使用方法详细讲解
    目录Stack的介绍和使用stack的默认定义的模板stack的使用queue的介绍和使用queue的默认定义的模板queue的使用Stack的介绍和使用 stack的文档介绍 st...
    99+
    2023-01-04
    C++ stack与queue C++ stack使用方法 C++ queue使用方法
  • C语言详细讲解const的用法
    目录一、int const a / const int a二、const int(*p)/int const(*p)三、int*const p四、const用于函数的地址传递参数一、...
    99+
    2024-04-02
  • C语言详细讲解if语句与switch语句的用法
    目录一、if 语句二、switch 语句三、错误提示一、if 语句 格式: if(写条件){输出内容}条件为真运行这个。 else {输出内容}否则输出这个。 代码: #includ...
    99+
    2024-04-02
  • C语言联合体Union特点及运用全面讲解教程
    目录前言一、联合(共用体)定义二、联合的特点及运用三、联合的大小计算总结前言 上一期C语言快速入门我们学习了枚举类型及相关知识点 这期我们来跟着笔者学习一下联合体相关知识,相信聪明的...
    99+
    2024-04-02
  • C++详细分析讲解引用的概念与使用
    目录1.引用的概念2.引用的格式3.引用的特性4.取别名原则5.引用的使用场景做参数做返回值int&Count()的讲解传值传引用效率比较6.引用和指针的不同点1.引用的概念...
    99+
    2024-04-02
  • C语言超详细讲解宏与指针的使用
    目录1、关于define2、初识指针(1)内存(2)示例(3)指针的使用示例(4)指针变量的大小1、关于define define是一个预处理指令,有两种用法,一种是用define定...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作