C/C++知识点之C语言进阶学习之struct与union分析
小标 2018-08-27 来源 : 阅读 942 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言进阶学习之struct与union分析,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言进阶学习之struct与union分析,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

大家好,今天来看看C语言中的struct与union,我们都知道,C语言中的struct可以看作变量的集合。那么首先来抛出一个问题:空结构体所占的内存空间为多大?

答案是不同的编译器结果不同,在gcc中,空结构体占0个字节;而在vs2010中直接编译不过。

结构体与柔性数组

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

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

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

struct SoftArray
{
int len;
int array[];
}

sizeof(struct SoftArray) = //该语句输出多少?
注意:SoftArray中的array仅仅是一个待使用的标识符,不占用存储空间!

那么我们该怎么去使用柔性数组呢?请看下图:

\

下边来看个具体的代码

#include 
#include 

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; ilen; i++)
        {
            sa->array[i] = i + 1;
        }
    } 
}

int main()
{
    int i = 0;
    struct SoftArray* sa = create_soft_array(10);//创建柔性数组
    
    func(sa);//给柔性数组赋值
    
    for(i=0; ilen; i++)
    {
        printf("%d ", sa->array[i]);
    }
printf("\n");
    
    delete_soft_array(sa);//销毁柔性数组
    
    return 0;
}
输出如下:

\

说完了struct,现在来说说union,union中只分配最大成员的空间,所有成员共享这个空间。

同时比较重要的一点是,union的使用受系统大小端的影响

\

请思考下边这段代码:

union C
{
int i;
char c;
};

union C c;
c.i = 1;
printf("%d\n", c.c); //输出多少?
我的电脑上vs2010输出如下:(说明我的系统为小端模式,如果在大端模式的系统中,则输出0)

\

总结:

1、struct中的每个数据成员都有独立的存储空间

2、struct可以通过最后的数组标识符产生柔性数组

3、union成员共享同一个存储空间,空间大小与最大成员所占空间大小一致

4、union的使用会受到系统大小端的影响    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程