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】結構體字對齊問題!!!