栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学习记录——유십일 一点练习题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学习记录——유십일 一点练习题

1、

int main()
{
    unsigned char puc[4];
    struct tagPIM
    {
        unsigned char ucPim1;
        unsigned char ucData0 : 1;
        unsigned char ucData1 : 2;
        unsigned char ucData2 : 3;
    }*pstPimData;
    pstPimData = (struct tagPIM*)puc;
    memset(puc, 0, 4);
    pstPimData->ucPim1 = 2;
    pstPimData->ucData0 = 1;
    pstPimData->ucData1 = 2;
    pstPimData->ucucData2 = 3;
    printf("%02x %02x %02x %02xn", puc[0], puc[1], puc[2], puc[3]);
    return 0;
}

输出02 29 00 00。puc分成四个部分,每一个都占据一个字节,现在把它的首元素地址强制转换为结构体类型,然后给了pstPimData,所以pstPimData就指向了puc的首元素,借助此就可以访问整个数组。现在存放结构体变量,Pim1占据puc[0],而puc[1]里,Data0占1个比特位,Data1占2个,Data2占3个。之后改变数值,puc[0]存放的就是00000010,而puc[1]里,假设是小端存储,data0是01,只有一个比特位,所以留1;data1是10,有2个比特位,所以留10;data2是101,有3个比特位,所以留101,所以puc[1]整体就是001011001,也就是29,puc[2]    puc[1]都为0, 所以最终结果就是02 29 00 00

2、

#include

int main()
{
    union
    {
        short k;
        char i[2];
    }*s, a;
    s = &a;
    s->i[0] = 0x39;
    s->i[1] = 0x38;
    printf("%xn", a, k);
    return 0;
}

a是这个联合体的名,s指针指向它,把a的地址放到s里,联合体共用一块内存,所以整个联合体就是2个字节。如果是小端存储,打印出来就是3839.

3、malloc不可像内存申请0字节的空间,这样可返回正常的地址,但是却不能使用。malloc开辟完后也必须释放内存。free也可释放NULL指针

结束。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887648.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号