關鍵字
意義關鍵字
意義auto
宣告自動變數,預設時編譯器一般預設為auto
register
宣告暫存器變數
int宣告整型變數
const
宣告唯讀變數
double
宣告雙精度變數
volatile
說明變數在程式執行中可被隱含地改變
long
宣告長整型變數
typedef
用以給資料型別取別名(當然還有其他作用)
char
宣告字元型變數
extern
宣告變數是在其他檔案中宣告(也可以看作是引用變數)
float
宣告浮點型變數
return
子程式返回語句(可以帶引數,也可以不帶引數)
short
宣告短整型變數
void
宣告函式無返回值或無引數,宣告空型別指標
signed
宣告有符號型別變數
continue
結束當前迴圈,開始下一輪迴圈
unsigned
宣告無符號型別變數
do迴圈語句的迴圈體
struct
宣告結構體變數
while
迴圈語句的迴圈條件
union
宣告聯合資料型別
if條件語句
enum
宣告列舉型別
else
條件語句否定分支(與if連用)
static
宣告靜態變數
for一種迴圈語句
case
開關語句分支
goto
無條件跳轉語句
default
開關語句中的其他分支
sizeof
計算物件所佔記憶體空間大小
break
跳出當前迴圈
switch
用於開關語句
register變數必須是能被cpu暫存器接受的型別。意味著register變數必須是單一的值,長度<=整型長度,且register變數可能不存放在記憶體中,所以不能用 「&」 來獲取它的位址。
作用1:修飾變數。變數又分為區域性變數和全域性變數,但它們都存在記憶體的靜態區。
作用2:修飾函式。函式前加static使得函式成為靜態函式。此處static指對函式的作用域僅限於本檔案。
靜態全域性變數,作用城僅限於變數被定義的檔案中,其他檔案即使用extern宣告也沒法使用它。準確的說:作用城是從定義之處開始,到檔案結尾處結束,在定義之處前面的那些**行也不能使用它。
靜態區域性變數,在函式體裡面定義的,就只能在這個函式裡用了,同乙個文件中的其他函式也用不了。由於被static修飾的變數總是存在記憶體的靜態區,所以即使這個函式執行結束,這個靜態變數的值也不會被銷毀,函式下次使用時仍然能用到這個值。
sizeof在計算變數所佔空間大小時,括號可以省略,而計算型別(模子)大小時不能省略。且一般情況下,sizeof是在編譯時求值,所以sizeof(i++)不會引起***。由於sizeof(i++)與sizeof(i)結果一樣,所以沒必要也不允許寫這樣的**。同樣,sizeof(i=1234); 也不允許,因為 i 的值還是0,沒有改變。
用sizeof計算字串長度時會算上『\0』。
bool變數與「零值」的比較:
if語句寫法:
bool btestflaf = false ;
// if(btestflaf);這種寫法不會引起誤會
// if(!btestflaf);
float變數與「零值」的比較:
if語句寫法:
float ftestval = 0.0;
if((ftestval >= - epsinon) && (ftestval <= - epsinon) );
//epsinon為定義好的精度
指標變數與「零值」的比較:
if語句寫法:
int *p = null;//定義指標一定要初始化
//if(null == p);
//if(null != p);
else到底與哪個if配對
else始終與同一括號內最近的未匹配的if語句結合。
使用if語句的其他注意事項
void的字面意思是「空型別」,void *則為「空型別指標」,void *可以指向任何型別的資料。void 幾乎只有「注釋」和限制程式的作用。但是是可以定義乙個void變數。
void真正用:對函式返回的限定;對函式引數的限定。
眾所周知,如果指標p1和p2的型別相同,那麼我們可以直接在p1和p2間互相賦值;如果p1和p2指向不同的資料型別,則必須使用強制型別轉換運算子把賦值運算子右邊指標的型別轉換為左邊指標的型別。例如:
float *p1;
int *p2;
p1 = (float *)p2;
而void * 不同,任何型別的指標都可以直接賦值給它,無需進行強制型別轉換:
void *p1;
int *p2;
p1 = p2;
但這並不意味著,void*也可以無需進行強制型別轉換地賦給其他型別的指標,因為「空型別」可以包容「有型別」,而「有型別」則不能包容「空型別」。
void *p1;
int *p2;
p2 = p1;//編譯出錯
提示「『=』:cannot convert from 『void *』 to 『int *』 "。
void修飾函式返回值和引數
void不能代表乙個真實的變數
定義const唯讀變數,具有不可變性。
void fun(const int *p);
const int fun(void);
使用浮點數應遵循已定義好的浮點數標準:
在表示浮點數的各個位元組中,究竟用多少位表示小數部分,多少位表示指數部分,標準c中無具體定義。
ansi/ieee標準的基本規定如下所述。
禁止使用八迸制的常數 (0除外,因カ嚴格意義上來講0也是八迸制數) 和八迸制的轉義字元。
在計算機中,任何以0開頭的數字都被認為是八迸制格式的數(當然十六進製制的0x不算)。所以,當我們寫固定長度的數字時,會存在一定的風險。舉例如下:
code[1] = 109;//對應十迸制的109
code[2] = 100;//對應十迸制的100
code[3] = 052;//對應十迸制的42,因為052是以0開頭,以八進位制形式儲存
code[4] = 071;//對應十迸制的57
在轉義字元中後面跟八迸制數,用於表示ascli碼等於該值的字元,使用時也可能會出現意想不到的錯誤。
code[5] = 『\109';
/*可能代表兩個字元,『\10』後面的9因為超出八進位制表示範圍,被看作字元「9」*/
#include int main()
return 0;
}
執行報錯
in function 『main』:
error: case label does not reduce to an integer constant
case a:
continue語句與break語句使用場合類似,continue語句是不可以在單獨的switch語句中使用,但可以在乙個迴圈內的switch語句中使用
不能。continue語句一般形式為"continue"。
其作用為結束本次迴圈。即跳出迴圈體中下面尚未執行的語句,對於while迴圈,繼續求解迴圈條件。而對於for迴圈程式流程接著求解for語句頭中的第三個部分expression表示式。
continue語句的作用是跳過迴圈本中剩餘的語句,並到迴圈末尾。
continue語句只用在for、while、do-while等迴圈體中, 常與if條件語句一起使用, 用來加速迴圈。
讀書筆記《c語言深度解剖》 4
10.struct關鍵字 這裡struct關鍵字講解得比較少,主要有3點 1 空結構體的大小為1 在gcc下我的輸出是0 2 柔性陣列 在c99中,允許結構最後乙個元素是乙個大小未確定的陣列,這個陣列叫做柔性陣列。但是柔性陣列前面必須至少有乙個其他成員。用sizeof返回結構體大小的時候,並不包含柔...
C語言深度解剖讀書筆記3
int p null 和 p null 的區別int p null 可以通過偵錯程式檢視p的值為 0x00000000 這句 的意思是 定義乙個指標變數p,其指向的記憶體裡面儲存的是 int 型別的資料 在定義變數p的同時把p的值設定為 0x00000000,而不是把 p 的值設定為0x000000...
c語言深度解剖筆記1
2016.8.14 dage 複習內容 c語言深度解剖筆記1 有三大類 算術運算子 關係運算子與邏輯運算子,還有位運算子等,相同優先順序運算子,從左至右依次運算。注意字尾運算優先順序高於字首。因此 i 應解釋為 i 基本表示式 1級 最高 字尾表示式 2極 單目 一元運算 3級 強制型別表示式 4級...