struct 可以看做变量的集合
// 空结构体占用内存大小
struct ST
{};
sizeof("%d\n", sizeof(struct ST));
// gcc 环境编译下大小为0
// bcc 环境下大小为 1
//两款编译器理解不一样
#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);
if(ret)
{
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;
}
union用法与struct相识
只分配最大成员空间,所有成员共享这个空间(受大小端影响)
union c
{
int i;
char c;
};
sizeif(union c); // 4字节
// 判断电脑大小端模式的代码
union C
{
int i;
char c;
};
union C c;
c.i = 1;
printf("%d\n", C.c);
总结:
小端模式:低地址存放低位数据
大端模式:低地址存放高位数据
可通过程序判断系统是什么模式System_Mode
Union中所有的数据共用一个空间,同一时间只能存储其中一个数据成员,所有的数据成员具有相同的起始地址
注:本笔记是根据狄泰C课程做的