C语言中比较复杂的是对程序运行过程中在内存分配方面的分析问题,接下来简单介绍下C语言中一般是怎么分配的,内存中分为栈,堆,

栈:栈中存放的是局部变量,出了作用域变量就会被释放,栈是从高地址到低地址存放变量,具有先进后出的特点。

堆:恰恰与栈相反,堆是从低地址向高地址存放变量的。存放在堆里的变量是由人工申请空间的,也需要人工释放空间。

静态区:全局变量等

内存从高地址到底地址依次是栈区,堆区和静态区,例如,下面这个例子



#include <stdio.h>

#include <stdlib.h>

int a = 0;

int main()

{

int i = 0;

int j = 0;

char *p = (char *)malloc(sizeof(char));

printf("%p", &a);

printf("\n");

printf("%p", &i);

printf("\n");

printf("%p", &j);

printf("\n");

printf("%p", &p);

printf("\n");

system("pause");

return 0;

}

结果如下:

wKiom1buLEzwYQbTAAARuUPxfxc942.png