2021-03-21 C语言结构体指针

union

typedef union
{
  char s[4];
  int value;
}udio;
    udio mydata;
    mydata.s[0]=0x12;
    mydata.s[1]=0x21;
    mydata.s[2]=0xa1;
    mydata.s[3]=0x5e;
    printf("%d\r\n",mydata.value);

输出结果为 1587618066

char 占用1字节,int为4字节
在上个union中char s[4]为4字节。 value为4字节
虽然有两个数据成员,但是这两个成员的存储空间是一样的
所以是s[0]即为value的低八位,依次赋值

特点:
1、union中能够定义多个成员, union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存, 一次仅仅能使用当中的一个成员。
3、对某一个成员赋值,会覆盖其它成员的值(由于他们共享一块内存。
但前提是成员所占字节数同样。当成员所占字节数不同一时候仅仅会覆盖对应字节上的值,

比方对char成员赋值就不会把整个int成员覆盖掉。

由于char仅仅占一个字节。而int占四个字节

4、联合体union的存放顺序是全部成员都从低地址開始存放的。

大端模式与小端模式

大端模式

高字节存低地址,低字节存高地址

小端模式

高字节存高地址,低字节存低地址

union用的是小端模式

动态内存分配

声明

#include <stdlib.h>
#include <stdio.h>
使用malloc函数与free函数
void *malloc(size_t size);
void  free(void *pointer);

申请内存后使用 NULL判断是否申请成功非常关键。

使用free§;函数时,传递给free的指针地址必须时使用malloc申请返回的指针。
不能释放非动态分配的内存,直接会引起程序的错误或停止。
不能访问已经被free函数释放的指针

内存泄漏
当动态内存不需要使用的时候,需要被释放掉,这样可以被重新分配使用,如果不能及时释放内存将引起内存泄漏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值