C語言基礎知識

2021-06-17 14:51:24 字數 715 閱讀 9324

一、位元組對齊

位元組對齊的原因,是機器在訪問記憶體中儲存的資料的高效性。通常機器是機器位數為自然邊界來訪問記憶體的,如果乙個4位元組整形數,所在的記憶體不在虛擬記憶體的自然邊界。則cpu需要讀多於一次的資料,這樣就降低了效率。

所以,簡單地說,就是保證cpu指令在訪問資料的時候,能一次讀取,而不需要跨越記憶體的自然邊界。32位系統預設4位元組對齊。當然可以通過#pragma pack(1)將記憶體改為1位元組對齊,用#pragma pack()恢復預設的位元組對齊。

二、常數0轉化為指標

(int) ((int*)0+4) 主要是被(int*)0給搞暈了,平時用的都是char *p; int *q; q=(int*)p; 這裡需要說明的是,0是常量,(int*)0表示的是乙個指標,指標指向0記憶體位址,指標的步長為sizeof(int)。類似這種: int a ; (char*)a:表示的是乙個char*的指標,指標的值是int型變數a指向的值。所以,((int*)0+4)表示的是指向值為16的記憶體位址。轉為為int型,自然也是16

三、內聯函式的本質

四、二分查詢

兩次倒在二分查詢。主要是沒有考慮邊界問題。回來實現了下:

int main()

;int n = 48;

while (high > low)

else if (n < narray[middle])

else

}    

return -1;

}

C語言基礎知識

1 的問題。int i 1 int j 2 int k i j printf d k 輸出k為3。編譯原理有關編譯器在詞法解析的時候,對於運算子,總是查詢最大的匹配也就是說,i j,編譯器在找到 的時候,它不立即理解為 而是繼續下乙個字元,下乙個字元仍然是 可以組成 再往下的話便是 不成立了。所以i...

C語言基礎知識

1.進製 1 基數 基數為n,代表n進製 2 位權 從個位開始,向左依次編號為0,1.x 分別代表n進 制的x次 3 八進位制以0開頭,十六進製制以0x開頭 4 x 進製轉 進製 按權求和 十進位制轉 x進製 連除倒取餘 2.基本資料型別 3.常量 程式執行期間值不能被改變的量 分為 整型常量,浮點...

c語言基礎知識

1 break 結束本次迴圈,不執行本次迴圈中break之後的語句,且結束該迴圈控制體 continue 意思是 中斷後 繼續 continue處結束本次迴圈,中止本次迴圈,不執行本次迴圈中continue之後的語句,但 中止後 沒有跳出該迴圈控制體,繼續執行本次迴圈之後的迴圈 共同點 都不會執行本...