學習筆記 C語言

2021-06-15 04:10:13 字數 2720 閱讀 5609

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...