2010-3-29

1】定義與申明

      定義聲明最重要的區別:定義創建了對象併爲這個對象分配了內存,聲明沒有分配內存。 int i;定義。 extern int i;聲明。

 

      註釋先於預處理指令被處理。

2】棧,堆和靜態區

      對於程序員,一般來說,可以簡單的理解爲內存分爲三個部分:靜態區,棧,堆。

      靜態區:保存自動全局變量和static變量(包括static全局和局部變量)。靜態區的內容在整個程序的生命週期內都存在,有編譯器在編

                  譯的時候分配。

      棧:保存局部變量。棧上的內容只在函數的範圍內存在,當函數運行結束,這些內容也會自動被銷燬。其特點是效率高,但空間有限。

      堆:由malloc系列函數或new操作符分配的內存。其生命週期有free或delete決定。在沒有釋放之前一直存在,直到程序結束。其特

            點是使用靈活,空間比較大,但容易出錯。

3】今天使用gets時的小問題!!!

            char sz[20];

            gets(sz);

            while(sz[0]!='/0')

            {

                    gets(sz);

            }

             看上面這個程序段,第一次運行gets輸入字符串“aa”,第二次居然直接跳出了while循環,也就是說while只執行了一次,查了

             下man了gets函數,看到了如下一句:

             gets() reads a line from stdin into the buffer pointed to by s until either a terminating newline or eof,which

             it replaces with '/0'. No check for buffer overrun is performed(see BUGS below).

             原來在當我按下回車的時候,第二個gets便將'/0'當成了它的輸入。

             如在第二個gets前加一個scanf('/n')吃掉按下的回車便可解決問題。。。

4】結構體字對齊問題!!!

發佈了18 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章