一、变量
定义:用来保存一些特定内容,并在程序执行过程中会随时发生变化的量。
定义方法:(存储类型) 数据类型 标识符 = 值
static int i = 0;
数据类型:基本数据类型+构造型
存储类型:auto、static、register、extern(说明型关键字)
auto:默认,自动分配空间(在栈上分配),自动释放空间;
static:静态型,自动初始化为0值或空值,并且其变量的值有继承性;
register:寄存器类型(建议型关键字),只能定义局部变量,不能定义全局变量,大小有限制,32位下只能定义32位大小的数据类型,double则不可以;
extern:说明型,不能改变被说明变量的值或类型,只声明不定义。
变量的生命周期:全局变量:从定义开始直到程序结束;局部变量:从声明位置开始直到当前块作用域(括号)结束。
二、结构体长度
声明一个结构体以及他的成员后,对这个结构体类型的一个结构体变量使用sizeof,发现长度并不是各个成员类型的长度进行简单的累加,比如struct student有成员int id和char name,而sizeof这个结构体,其占了8个字节而不是5个。原因就是结构体的内存对齐。
原则:1)结构体长度是最长成员字节长度的整数倍。
2)第二个及以后的成员,其起始地址需要能够整除其长度。
int main(void)
{
struct student
{
int id;
char name;
};
struct student std1;
printf("size of struct: %d\n",sizeof(std1));
exit(0);
}
size of struct: 8
三、malloc
动态分配内存,有利于内存的高效利用,一定要在一个模块中谁申请谁释放,用free释放。
函数:void *malloc(size_t size);返回的是堆上一块连续size个字节内存的首地址。
void *calloc(size_t nmemb, size_t size);返回连续nmemb个sisze大小空间的首地址。
void free(void *ptr);释放ptr指向的内存。
void *realloc(void *ptr, size_t size);给ptr重新分配size大小内存。