标签:
先进后出
栈的大小固定,默认1M,可以编译的时候设置,超出则溢出
变量离开作用范围后,栈上的数据会自动释放
栈是连续的,向上增长
#include<stdio.h> #include <stdlib.h> void go(); void main() { void *p1 = malloc(10); //p1,p2栈上 void *p2 = malloc(20); //00A0F914, 00A0F908 printf("%p,%p", &p1, &p2);//地址在栈上,向上增长 //00A63CD8, 00A67A50 printf("\n%p,%p", p1, p2);//堆区,向下增长 getchar(); }
函数参数的压栈顺序是从右向左
int a=4; //参数压栈的顺序从右向左 printf("%d,%d", a, ++a);//5,5
堆上内存需要手动申请手动释放,由程序控制,malloc申请,free释放
堆是链接的,向下增长,连续的存取速度快于链接
数据占用内存大小是否明确
手动管理还是自动管理
存放全局变量/常量,静态变量/常量
全局变量
全局变量和函数声明可以有多个
可以跨文件使用
静态变量
与程序共存亡,编译的时候就初始化,只会初始化一次
只能在当前c文件中使用
程序代码指令、常量字符串,只可读
#include <stdio.h> #include <stdlib.h> //判断栈是否为空 int isempty(); //设置栈为空 void setempty(); //进栈 int push(int num); //出栈 int pop(); #define N 5 struct stack { int top;//栈顶 int data[N];//存放数据 }; //栈的初始化 struct stack mystack = { -1, { 0 } }; void main() { int num[5] = {1,2,3,4,5}; for (int i = 0; i < 5; i++) { push(num[i]); } while (!isempty()) { printf("%d",pop()); } getchar(); } //判断栈是否为空 int isempty() { if (mystack.top != -1) { return 0;//0表示不为空 } return 1;//1代表空 } //设置栈为空 void setempty() { if (isempty()) { mystack.top = -1; } } //进栈 int push(int num) { if (mystack.top == N - 1) { return -1; } else { mystack.top += 1; mystack.data[mystack.top] = num; return 1; } } //出栈 int pop() { int num=-1; if (!isempty()) { num= mystack.data[mystack.top]; mystack.top -= 1; } return num; }
int isDec(int num[],int len) { if (len==1) { return 1; } else { if (num[len-1]<num[len-2]) { return isDec(num, len - 1); } else { return -1; } } }
//n必须是0
int isDec(int num[],int len,int n) { if (n==len-2) { return num[n] > num[n + 1]; } else { return (num[n] > num[n + 1]) && isDec(num,len,n+1); } }
标签:
原文地址:http://www.cnblogs.com/ginb/p/4398304.html