閱讀770 返回首頁    go 微軟 go Office


Way on c & c++ 小記 [一]

標題:那一抹綠色

       想來大多數學習C語言的人都是從譚浩強教授那本綠色封麵的《C語言程序設計》入門的,我也是其中之一。記得那是在大學入學前,我在泉州九一街十字路口的曉風書屋(後來為風雅頌)買下了那本書。

命運的手掌輕輕一撫,就突如其來地使得我選擇了計算機專業,這是我所始料不及的。雖然計算機也是我的興趣,雖然高中時代在家還會津津有味地對著《黑客X檔案》或者《電腦愛好者》的VB教程敲個QQ盜號程序或者趣味小程序,但是我從來沒有想過會去讀計算機專業,現在看來倒真有點不能理解為何如此。不過細細想來,一個不可忽視的原因可能會是相較於劃拉VB界麵,我有更多的時候是在看比如今何在的《悟空傳》,然後為封麵的那幾句話振奮不已,為裏麵的愛情故事揪心不已,比如餘秋雨的《千年一歎》,然後因為耶路撒冷那座掛著許多天真兒童畫像的大屠殺紀念館難過不止,又比如《三國演義》,比如《史記》……

雖然理工科更偏向的是邏輯的嚴密性,但命運手掌的指縫間難免遺漏點傷春悲秋的細屑,比如現在。不過卻不會再一發不可收拾。

如果一味地搞文學氣息,想必我都可以改行去嚐試做個詩人或者作家了,而不必在此整理回顧我所學過的計算機知識了。

----------------------------------------cuttingline----------------------------------------

那麼,回到學術問題上,以一段簡單的代碼開始這段旅程:

#include <stdio.h>
 
/*
 *Jason Lee
 *良好的多行注釋風格
 *一般用於程序說明或者函數說明
 */
 
void colorGreen(){
       printf("那一抹綠色/n");//單行注釋
}
 
int main(int argc, char *argv[]){
       colorGreen();
       printf("%d/n",argc);
       printf("%s/n",argv[0]);
       return 0;
}


       以上代碼是典型的C程序結構,其中值得提的有兩個地方:一是開始的多行注釋,現在編寫程序應盡量使用良好的注釋風格和命名習慣;二是主函數的兩個參數,分表代表係統調用程序時給的參數個數和參數列表,默認有一個參數argv[0],即程序本身。

       那麼,這個程序的運行過程是如何的呢?當然,我指的是在內存中執行的某方麵。

       操作係統使用棧式、堆式兩種內存分配方法,而在管理函數調用方麵采取的是棧式分配策略。堆和棧是朝著對方進行擴展的,棧向下擴伸,而堆相反。

       首先自然是main函數得到調用,它在棧中獲得了一片存儲區域,稱為活動記錄,裏麵保存著該函數的變量、參數等信息,在此不妨將之稱為main活動記錄。緊接著main函數調用colorGreen函數,同樣的,colorGreen也在棧中建立了一個活動記錄,並且緊接在main活動記錄下方。係統總是對棧頂的活動記錄進行操作,當然不總是成功,在這裏我們假設操作成功,於是係統執行colorGreen結束後將棧頂元素出棧,繼續操作棧頂元素,此時就是main活動記錄了。

      

main活動記錄

colorGreen活動記錄

 

       不妨增加一個colorRed函數,功能類似colorGreen,並且將之放置在main函數中緊接colorGreen之後,即調用colorGreen後馬上調用colorRed。這時候的活動記錄存活順序是:main活動記錄進棧,colorGreen活動記錄進棧,colorGreen活動記錄出棧,colorRed活動記錄進棧,colorRed活動記錄出棧,繼而繼續執行main函數。如果我們將之看做樹的形式,即main函數的左兒子是colorGreen,右兒子是colorRed,可以看出是一個後序遍曆的過程。並且可以知道,某結點的左兄弟(如果有的話)總是先於該結點消亡,沿該結點往上直達樹根對應了棧中最底層的活動記錄往上直到main函數。

2010-1-24

----------------------------------------cuttingline----------------------------------------

 

最後更新:2017-04-02 04:01:45

  上一篇:go 鑰匙錄製的magento視頻,中文解說
  下一篇:go GNU GPL--GNU通用公共許可證