文章目录:
解析uc/os-ii操作系统之-写在前面:http://www.51hei.com/bbs/dpj-39350-1.html
解析uc/os-ii操作系统--之创建一个单向链表:http://www.51hei.com/bbs/dpj-39833-1.html
单向链表之--添加结点的程序详解:http://www.51hei.com/bbs/dpj-39834-1.html
什么是“堆”和“栈”? 动态内存分配? :http://www.51hei.com/bbs/dpj-39835-1.html
C语言函数指针,函数动态回调:http://www.51hei.com/bbs/dpj-39836-1.html
什么是“堆”和“栈”? 什么是动态内存分配?为什么需要动态内存分配?动态内存分配与静态内存分配有什么区别?到底什么是指针?我坚信通过本例程能够对这些问题有很深的理解。本例程很简单,却是很有深度!当然比起前面的链表例程那就简单多了。
什么叫编程?答案有很多。我更认同“编程就是数据结构+算法”的观点。如果不能正真搞懂C语言,所谓的嵌入式开发就很难学得好。学习C语言干什么?计算机语言是用来模拟现实世界的,是用来解决现实生活中的问题的。
下面的例子可以在VC++6.0编译平台运行仿真:
#include "stdio.h"#include "stdlib.h"
/*
“栈”和“堆”存在于内存中的不同地址处,即存在于不同的存储区。
什么是栈空间?栈空间是静态内存分配,空间大小由编译器决定;静态分配的内存在“栈”里,程序运行结束由系统
自动释放;函数运行时的临时数据和以如“char A;”形式声明的变量空间都属于静态内存,存储在“栈”里,“栈”
是一种先进后出“FILO”的数据结构;所谓“静态”是指数据结构一旦声明内存空间就固定不变。
什么是堆空间?堆空间由动态内存分配,大小由运行时malloc()函数(或new())灵活决定;空间大小根据实际需要灵活把握;
malloc()函数动态分配的空间在“堆”里;malloc()函数动态分配的空间必须由程序员通过free()函数(delete())释放,否则可能会造成内存泄露!是一种先进先出“FIFO”的数据结构;如,“队列”;
如,static int=9;//int类型9,存储在栈里
*/
int main(void)
{
// char buf[10000];
int i=0;
int n;
while(i++<2)//这里i表示循环两次,也就是说 scanf("%s",buf);操作少于2次!
{
scanf("%d",&n);//给n动态赋值
char * buf = (char*)malloc(n+1);//一定要强制类型转换,否则报错!
if(!buf)//相当于JAVA里的抛出异常,如果动态内存分配失败
{
perror("malloc");
exit(-1);//#include "stdlib.h",属于C语言库函数,退出该进程
}
scanf("%s",buf);//给buf空间赋值以字符串
printf("%s\n",buf);//打印出字符串
free(buf); //将动态空间及时释放,如果不及时释放或将该语句注释掉会怎样呢?通过仿真发现无法打印出结果!
}
return 0;
}
|