|
文章目錄:
解析uc/os-ii操作系統(tǒng)之-寫在前面:http://www.torrancerestoration.com/bbs/dpj-39350-1.html
解析uc/os-ii操作系統(tǒng)--之創(chuàng)建一個(gè)單向鏈表:http://www.torrancerestoration.com/bbs/dpj-39833-1.html
單向鏈表之--添加結(jié)點(diǎn)的程序詳解:http://www.torrancerestoration.com/bbs/dpj-39834-1.html
什么是“堆”和“!? 動(dòng)態(tài)內(nèi)存分配? :http://www.torrancerestoration.com/bbs/dpj-39835-1.html
C語言函數(shù)指針,函數(shù)動(dòng)態(tài)回調(diào):http://www.torrancerestoration.com/bbs/dpj-39836-1.html
什么是“堆”和“棧”? 什么是動(dòng)態(tài)內(nèi)存分配?為什么需要?jiǎng)討B(tài)內(nèi)存分配?動(dòng)態(tài)內(nèi)存分配與靜態(tài)內(nèi)存分配有什么區(qū)別?到底什么是指針?我堅(jiān)信通過本例程能夠?qū)@些問題有很深的理解。本例程很簡單,卻是很有深度!當(dāng)然比起前面的鏈表例程那就簡單多了。
什么叫編程?答案有很多。我更認(rèn)同“編程就是數(shù)據(jù)結(jié)構(gòu)+算法”的觀點(diǎn)。如果不能正真搞懂C語言,所謂的嵌入式開發(fā)就很難學(xué)得好。學(xué)習(xí)C語言干什么?計(jì)算機(jī)語言是用來模擬現(xiàn)實(shí)世界的,是用來解決現(xiàn)實(shí)生活中的問題的。
下面的例子可以在VC++6.0編譯平臺運(yùn)行仿真:
#include "stdio.h"#include "stdlib.h"
/*
“!焙汀岸选贝嬖谟趦(nèi)存中的不同地址處,即存在于不同的存儲區(qū)。
什么是?臻g?棧空間是靜態(tài)內(nèi)存分配,空間大小由編譯器決定;靜態(tài)分配的內(nèi)存在“棧”里,程序運(yùn)行結(jié)束由系統(tǒng)
自動(dòng)釋放;函數(shù)運(yùn)行時(shí)的臨時(shí)數(shù)據(jù)和以如“char A;”形式聲明的變量空間都屬于靜態(tài)內(nèi)存,存儲在“!崩铮皸!
是一種先進(jìn)后出“FILO”的數(shù)據(jù)結(jié)構(gòu);所謂“靜態(tài)”是指數(shù)據(jù)結(jié)構(gòu)一旦聲明內(nèi)存空間就固定不變。
什么是堆空間?堆空間由動(dòng)態(tài)內(nèi)存分配,大小由運(yùn)行時(shí)malloc()函數(shù)(或new())靈活決定;空間大小根據(jù)實(shí)際需要靈活把握;
malloc()函數(shù)動(dòng)態(tài)分配的空間在“堆”里;malloc()函數(shù)動(dòng)態(tài)分配的空間必須由程序員通過free()函數(shù)(delete())釋放,否則可能會(huì)造成內(nèi)存泄露!是一種先進(jìn)先出“FIFO”的數(shù)據(jù)結(jié)構(gòu);如,“隊(duì)列”;
如,static int=9;//int類型9,存儲在棧里
*/
int main(void)
{
// char buf[10000];
int i=0;
int n;
while(i++<2)//這里i表示循環(huán)兩次,也就是說 scanf("%s",buf);操作少于2次!
{
scanf("%d",&n);//給n動(dòng)態(tài)賦值
char * buf = (char*)malloc(n+1);//一定要強(qiáng)制類型轉(zhuǎn)換,否則報(bào)錯(cuò)!
if(!buf)//相當(dāng)于JAVA里的拋出異常,如果動(dòng)態(tài)內(nèi)存分配失敗
{
perror("malloc");
exit(-1);//#include "stdlib.h",屬于C語言庫函數(shù),退出該進(jìn)程
}
scanf("%s",buf);//給buf空間賦值以字符串
printf("%s\n",buf);//打印出字符串
free(buf); //將動(dòng)態(tài)空間及時(shí)釋放,如果不及時(shí)釋放或?qū)⒃撜Z句注釋掉會(huì)怎樣呢?通過仿真發(fā)現(xiàn)無法打印出結(jié)果!
}
return 0;
}
|
|