《程序员面试宝典》--栈和堆,局部变量和全局变量
2015-08-04 16:06
274 查看
在队列,栈,链表中都存在:顺序结构和链式结构
栈:仅在表尾进行插入删除的线性表
栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸。使用函数先进行参数压栈,顺序从右向左。(P189)
堆:由程序员分配和释放,如 malloc。栈:由编译器自动分配和释放。
全局变量和静态全局变量,局部变量和静态局部变量
全局变量和静态全局变量: 都储存在静态存储区;声明在函数块之外;作用域有区别,全局变量在一个源文件声明之后,所有源文件都能使用,只是其他源文件需要加extern关键字,而静态全局变量的作用域只能在产生定义的源文件内,使用静态全局变量可以避免文件间的耦合。二者都有全局作用域,对所有函数可见。
局部变量和静态局部变量:局部变量在栈中分配空间,静态局部变量在静态存储区内分配空间。作用域都是函数执行期间,仅对声明该变量的函数内可见。
局部变量加上static,改变生命周期,从函数活动期间延长到整个程序运行期间。全局变量加上static改变了作用域,从所有源文件可见到仅声明的源文件可见。
栈的POP 和 PUSH
栈:仅在表尾进行插入删除的线性表
栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸。使用函数先进行参数压栈,顺序从右向左。(P189)
堆:由程序员分配和释放,如 malloc。栈:由编译器自动分配和释放。
全局变量和静态全局变量,局部变量和静态局部变量
全局变量和静态全局变量: 都储存在静态存储区;声明在函数块之外;作用域有区别,全局变量在一个源文件声明之后,所有源文件都能使用,只是其他源文件需要加extern关键字,而静态全局变量的作用域只能在产生定义的源文件内,使用静态全局变量可以避免文件间的耦合。二者都有全局作用域,对所有函数可见。
局部变量和静态局部变量:局部变量在栈中分配空间,静态局部变量在静态存储区内分配空间。作用域都是函数执行期间,仅对声明该变量的函数内可见。
局部变量加上static,改变生命周期,从函数活动期间延长到整个程序运行期间。全局变量加上static改变了作用域,从所有源文件可见到仅声明的源文件可见。
栈的POP 和 PUSH
#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; }Node,*pNode; typedef struct Stack { int count; pNode top;//注意:非 pNode *top }LinkStack; int Push(LinkStack *S,int e) { pNode s = (pNode)malloc(sizeof(Node)); //结构分为Node和pNode的用处 s->data = e; s->next = S->top; S->top = s; S->count++; return 0; } int Pop(LinkStack *S,int *e) { //注意:先判断栈是否为空 pNode p; if(S->count == 0) return 0; *e = S->top->data; p = S->top; S->top=S->top->next; free(p);//pop必须要释放节点 S->count--; return 0; }
相关文章推荐
- 程序员学炒股(5) 股指交割日效应是否存在?
- Java后台-面试问题汇总:历时20天,主流互联网公司面试经历
- 程序员学炒股(4) 早晨十字星靠不靠谱
- 职场达人必备!PDF、WORD、PPT、TXT互相转换方法
- Java集合框架面试问题集锦
- 程序员学炒股(3) 个股和大盘的关系之二
- 常见的SQL面试题
- 阿里——杭州——电话面试题(2016)
- 不会用ant打包、部署项目的工程师,不是一个好程序员(测试)
- 深度解读Adblock plus经历与底层算法实现
- 推荐!国外程序员整理的 PHP 资源大全
- 【程序员眼中的统计学(6)】几何分布、二项分布及泊松分布:坚持离散
- 黑马程序员——反射
- 黑马程序员-----OC学习之内存管理
- 程序员几个重要的网站
- 面试题41_和为连续序列
- iOS 面试相关
- 面试题40_数组中只出现一次的数字
- 阿里巴巴影业面试总结
- leetcode面试准备: Jump Game II