1. for( ; 1 ; ) 等價於 while(1)
2. 程式的區域性變數存在於(堆疊)中,全域性變數存在於(靜態區 )中,動態申請資料存在於( 堆)中。
3. 區域性變數能否和全域性變數重名? 能,區域性會遮蔽全域性。要用全域性變數,需要使用"::"
4. 對於乙個頻繁使用的短小函式,在c語言中應用什麼實現,在c++中應用什麼實現? c用巨集定義,c++用inline
5. 引用與指標的區別 1) 引用必須被初始化,指標不必。
2) 引用初始化以後不能被改變,指標可以改變所指的物件。
3) 不存在指向空值的引用,但是存在指向空值的指標。
舉個例子 :
int a; //宣告變數a
int& ra = a; //宣告乙個引用,名字是ra,ra引用了a
注意,ra宣告的時候必須同時給出它到底引用了誰
int& ra; //只宣告不指明是不對的。
還有,引用一旦宣告,就不能再修改到其他變數上了,這與指標不同。
ra = b; //這是不行的,因為已經int &ra = a了
6. switch()除了整型,列舉型別,字元型,其他的都不行。譬如:字串,浮點型這些都不可以作為switch的參 數型別。
7. 寫出判斷abcd四個表示式的是否正確, 若正確, 寫出經過表示式中 a的值int a = 4;
(a)a += (a++); (b) a += (++a) ;(c) (a++) += a;(d) (++a) += (a++);
a = ?
答:c錯誤,左側不是乙個有效變數,不能賦值,可改為(++a) += a;
改後答案依次為9,10,10,11
8. sizeof 是關鍵字不是函式!
9. register int a 是定義乙個變數, 只不過這個變數是儲存在暫存器而已, 不在記憶體,好處是訪問速度快,缺點 是不能&取位址
10.return 返回值不能是指向棧記憶體的指標,如:
char *test()
;
...........
return str;
}
這個指標是指向棧記憶體的指標 當函式呼叫結束時所指向的位址也就不復存在了(或者說是被銷毀無效了)
11.乙個空的結構體大小不能為0,但不能大於非空結構體的最小值(裡面剛好只有乙個char變數),也就是要大於0,但又要不大於1,折中其大小剛好為1byte。
12.int a,b,c; c=a/b的值得正負性由b決定 c=a%b的餘數的正負性由a決定
13.#define bsc //
bsc printf("this is a test\n");
編譯時會報錯,原因在於注釋先於預處理,也就是編譯器先將注釋的拿掉,然後進行預處理,最後才正式的編譯, 所以,當處理注釋時沒有將上面語句注釋掉,等到預處理後,雖然bsc被替換成// 但於事無補,所以編譯出錯, 因為編譯時不認識// 。
14.char str[10]=; 則 &str+1步進是偏移10*1個位元組 而&str[0]+1 步進偏移1*1個位元組 後者等效str+1,也是偏移乙個元素,換而言之,&str是陣列的首位址,str是陣列首元素的首位址。
15.若釋放一塊由malloc獲得的記憶體時,即free(p),記得要 p=null重新初始化,因為free只是將p指向那塊記憶體的聯絡斬斷,p還是指向那塊記憶體的首位址,只是此時沒許可權,可這個位址還是存在p裡有隱患!!!俗稱野指標
16.所謂的記憶體洩露是指堆由malloc或者new申請後用完沒通過free或者delete釋放,導致可用的堆越來越少了。
17.getchar()返回的事int型的 不是char!!太坑人了..... 原型 int getchar(void)
18.if(a&&b) 只有a為真時才看b,否則看都不看b就跳出 同理 ||只有a為假才看b
19.int i=3, j = sizeof(++i+ ++i); 則輸出j=2(16位處理器)或4(32位處理器)即等效sizeof(int) 而i=3, 即不執行裡面的 (++i+ ++i) 因為sizeof所佔的大小在編譯時就已經確定了,不需要再執行來確定,也就是說, 不會執行(++i+ ++i)所以i還是原值。
20.char *p="daw"; printf("%d\n",strlen(p)); 輸出是3 即輸出是有效值
21.printf("",x,++x); 計算是從右到左 所以先算 ++x 再算x 所以結果一樣
22.原始檔(.c)經過編譯生成中間檔案或者叫目標檔案(.o/.obj),再由聯結器將啟動**(相當程式與作業系統的介面)、庫**三者合成可執行檔案(.exe)。
23.int main(void) 是c99標準 老的版本是 main() c90對其支援,還有就是 void main() 不過最好不要用後兩者
24.傳統上,c要求在**塊{}開始處宣告變數然後才是其他語句,而在c99遵循c++慣例 宣告語句可以放在**塊任 意處,不過一定是放在首次使用它的前面。為了相容及習慣,還是繼承「優良」傳統吧。
持續更新中........................
C語言學習筆記
include include void swap int p1,int p2 void swapa int arr,int n void printfa int arr,int n int main int argc,char argv swap i,j printfa array,6 swapa...
c語言指標學習筆記
example 1 int a,b,p,q p a p a p q b p p a 錯誤,因為p實際上是乙個位址,而a是乙個整型值 p q 錯誤,因為這句話的意思是 將位址q指向的單元的值賦給位址p。而實際上p是乙個位址,是不能存值得 p a 錯誤 注意,如果這樣定義了 p,那麼 p表示位址 指標 ...
C語言學習筆記
file 結構 包含在stdio.h裡 ifndef file defined struct iobuf typedef struct iobuf file define file defined endif fread 功 能 從乙個流中讀資料 函式原型 size t fread void buf...