1、程序运行时,内存空间分为两大块:动态内存区 和 静态内存区。
2、动态内存区分为:栈 和 堆
3、一般变量的定义省略了auto关键字,实际上是一种栈,系统会自动分配和释放。
4、堆 是程序员使用的,由程序员分配和释放。
5、注意:堆变量必须手动释放,否则即使程序退出,该变量依旧占用空间。
例如:在C中,用malloc分配的变量,必须由free释放。
6、指针是一种特殊的变量,指针的类型是一种派生类型,由星号“ * ”和某种数据类型组成,但是指针所占的字节在32位机上都是4个字节(64位机占8个字节)。
7、指针声明时最好马上用NULL初始化:
int *p = NULL;
8、指针用于存放地址(门牌号):
int a = 3;
p = &a; // &:取址符
将变量a的地址存放到p中
9、通过指针更改变量的值:
a = 8;
// 利用指针更改变量的值
*p = 8; // *:取值 (*p:取p指向的内存空间的值)
10、上面讲的是指向栈的指针,线面介绍指向堆的指针。
11、指向堆的指针涉及到内存的分配malloc,malloc返回的是一个void*型指针,最好强制转化一下:
p = (int *)malloc(sizeof(int));
12、另外,malloc的头文件:#include <malloc.h>