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>