结构体
结构体定义:
包含C语言中所有的简单的数据类型 以及复杂数据类型的一种复合数据类型
Struct +结构体名
{
数据1;
数据2;
......
};
结构体定义好只是一个数据类型,如果要访问内部的成员,需要用到结构体变量或者结构体指针。
struct a;/struct *p=&a
字节对齐
计算结构体的大小
Struct people
{
Char name[29];
Int age;
Double height;
};---》48
在计算结构体大小的时候,先看结构体内部成员的数据类型有没有超过4个字节,如果没有,就按照最大的数据类型进行对齐,如果超过4字节,就按照4字节对齐。
结构体数组
数组:同一类型元素的集合。
结构体数组:是一个数组,只不过数据的类型是结构体类型
Struct people
{
Char name[20];
Int age;
};
Struct people a,b,c;
Struct people Arr[3] = {{“aa”,1},{“bb”,1},{“cc”,1}};--->结构体数组
访问内部元素:arr[0].name;arr[0].age;
共用体
共用同一片空间,先找最大的数据,那么共用体的大小就是最大的数据类型的大小。
共用体每个元素的地址都相同
#include <stdlib.h>
void *malloc(size_t size);
在堆区申请空间
参数:申请的空间大小
返回值:成功返回空间首地址,失败返回NULL
因为malloc的返回值是void *,所以在申请空间成功之后,根据所申请到的空间进行强制类型转换
Int * p= (int *)malloc(sizeof(int)*5);
#include <string.h>
void *memset(void *s, int c, size_t n);
作用:清空空间(任何空间)
参数1:空间的首地址
参数2:用来清空空间的字符
参数3:清空空间的大小
Memset(p,0,sizeof(int)*5);
void free(void *ptr);
清空空间
参数:空间的首地址
void *realloc(void *ptr, size_t size);
参数1:空间的首地址
参数2:扩容的大小
返回值:扩容后的空间首地址
如果malloc之后的放不下,那么重新开辟空间进行存放,空间的首地址会改变,原本malloc的内容会被复制
如果放得下,那么就在malloc空间之后进行开辟,空间首地址不变