C語言基礎知識

2021-09-12 17:24:06 字數 1979 閱讀 7170

位元組(byte)和bit的區別

bit:位元是表示資訊的最小單位,是二進位制數的一位包含的資訊或2個選項中特別指定1個的需要資訊量。只有2種狀態即0和1。

byte:計量儲存容量的一種計量單位,通常情況下一位元組等於8 bit

常用資料型別所佔bit數型別

bit數

int32

short

16long

32char

8列舉

列舉型別是一種基本資料型別,不是一種構造型別,因為它無法再分解成為任何基本型別

指標

c語言中指標常量只有乙個null

字串常量

字串常量在記憶體中儲存的時候系統會自動加字串的末尾加乙個"\0"作為字串結束標誌。因此在計算長度為n個字元的字串常量的時候,在記憶體中實際占有n+1個位元組的儲存空間。

typedef關鍵字

typedef是為一種資料型別定義乙個新的名字,例如:typedef unsigned long uint32,這樣就把uint32宣告為unsigned long型別了,在使用中就等同於使用unsigned long

常量const關鍵字

const int *a:const用來修飾指標a所指向的物件,也就是說我們無法通過指標a來修改其指向的物件。但是指標a本身的值是可以改變的,即可以指向其他物件。

int * const a:const修飾的是指標a,因此指標本身的的值是不可改變的,無法指向其他的物件,但是其指向的物件的值是可以改變的

int const *a:與const int *a意義相同

預定義符號

_ file _ :正在預編譯的檔名

_ line _ :檔案當前行的行號

_ function _ :當前所在的函式名

_ data _ :預編譯檔案的日期

_ time _ :預編譯檔案的時間

_ stdc _ :如果編譯器遵循ansi c,則為1

條件編譯

#ifdef ***

#endif

#ifndef ***

#endif

#if defined (***) || defined (yyyy)

#endif

#if defined (***) || !defined (yyyy)

#endif

#if (defined(vegeta) || defined(_ vegeta _)) && defined(egis)

資料對齊

如果乙個變數的記憶體位址正好是它長度的整數倍,就被稱作自然對齊。例如乙個32位(4個位元組)型別的資料,如果在記憶體中的位址剛好可以被4整除(最低2位是0),那麼它就是自然對齊的。

位元組序

typedef

unsigned

char byte;

tyepdef unsigned

int word;

word val32 =

0x87654321

;byte val8 =*(

(byte *

)&val32)

;

因為0x87是高位元組,0x21是低位元組,val8取得是高位址中的資料,所以如果val8=0x21則是大端模式,如果val8=0x87則是小端模式

移位運算

移位(<< / >>):左移(<<)n位相當於將原數乘以2n,而右移(>>)則相當於將原數除以2n

三目運算子

a > b ? a : b;
a>b為真,結果為a,否則為b

C語言基礎知識

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

C語言基礎知識

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

C語言基礎知識

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