在linux写一个程序,里面全局变量,局部变量,static,const,常数,数组,输出这些变量的地址:
程序如下:
#include <stdio.h>
int b_n;
int b_y = 2;
static int b = 3;
const int bb = 4;
void part()
{
int a_n;
int a_y = 1;
static int a = 1;
const int aa = 11;
printf("未赋值的局部变量的地址:%p\n",&a_n);
printf("赋值的局部变量的地址:%p\n",&a_y);
printf("static修饰的局部变量的地址:%p\n",&a);
printf("const修饰的局部变量的地址:%p\n",&aa);
}
int main()
{
int c[20];
printf("未赋值的全局变量的地址:%p\n",&b_n);
printf("赋值的全局变量的地址:%p\n",&b_y);
printf("static修饰的全局变量的地址:%p\n",&b);
printf("const修饰的全局变量的地址:%p\n",&bb);
printf("数组的首地址:%p\n",c);
part();
}
运行结果如下图:
可以看出全局变量和static修饰的变量在同一个存储位置,局部变量有自己 的存储位置,数组也是有自己的存储位置。具体位置请看下面的博客:
http://blog.csdn.net/qq_34528825/article/details/51908547
堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出 。栈,先进后出。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。