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函数释放的指针
内存泄漏
当动态内存不需要使用的时候,需要被释放掉,这样可以被重新分配使用,如果不能及时释放内存将引起内存泄漏。