auto 聲明自動變量,缺省時編譯器一般默認為auto
int 聲明整型變量
double 聲明雙精度變量
long 聲明長整型變量
char 聲明字符型變量
float 聲明浮點型變量
short 聲明短整型變量
signed 聲明有符号類型變量
unsigned 聲明無符号類型變量
struct 聲明結構體變量
union 聲明聯合數據類型
enum 聲明枚舉類型
static 聲明靜态變量
switch 用于開關語句
case 開關語句分支
default 開關語句中的“其他”分支
break 跳出當前循環
register 聲明寄存器變量
const 聲明隻讀變量
volatile 說明變量在程序執行中可被隐含地改變
typedef 用以給數據類型取别名(當然還有其他作用)
extern 聲明變量是在其他文件正聲明(也可以看做是引用變量)
return 子程序返回語句(可以帶參數,也可不帶參數)
void 聲明函數無返回值或無參數,聲明空類型指針
continue 結束當前循環,開始下一輪循環
do 循環語句的循環體
while 循環語句的循環條件
if 條件語句
else 條件語句否定分支(與if 連用)
for 一種循環語句(可意會不可言傳)
goto 無條件跳轉語句
sizeof 計算對象所占内存空間大小
下面的篇幅就一一講解這些關鍵字。但在講解之前先明确兩個概念:
什麼是定義?什麼是聲明?它們有何區别?舉個例子:
A)int i;
B)extern int i;(關于extern,後面解釋)
哪個是定義?哪個是聲明?或者都是定義或者都是聲明?我所教過的學生幾乎沒有一人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!
什麼是定義:所謂的定義就是(編譯器)創建一個對象,為這個對象分配一塊内存并給它取上一個名字,這個名字就是我們經常所說的變量名或對象名。但注意,這個名字一旦和這塊内存匹配起來(可以想象是這個名字嫁給了這塊空間,沒有要彩禮啊O(∩_∩)O~),它們就同生共死,終生不離不棄。并且這塊内存的位置也不能被改變。一個變量或對象在一定的區域内(比如函數内,全局等)隻能被定義一次,如果定義多次,編譯器會提示你重複定義同一個變量或對象。
什麼是聲明:有兩重含義。如下:
第一重含義:告訴編譯器,這個名字已經匹配到一塊内存上了(伊人已嫁,吾将何去何從?何以解憂,唯有稀粥),下面的代碼用到變量或對象是在别的地方定義的。聲明可以出現多次。
第二重含義:告訴編譯器,我這個名字我先預定了,别的地方再也不能用它來作為變量名或對象名。比如你在圖書館自習室的某個座位上放了一本書,表明這個座位已經有人預訂,别人再也不允許使用這個座位。其實這個時候你本人并沒有坐在這個座位上。
這種聲明最典型的例子就是函數參數的聲明,例如:
void fun(int i, char c);
好,這樣一解釋,我們可以很清楚的判斷:A)是定義;B)是聲明。那他們的區别也很清晰了。記住,定義聲明最重要的區别:定義創建了對象并為這個對象分配了内存,聲明沒有分配内存(一個抱伊人,一個喝稀粥O(∩_∩)O~)。
在c 中去解釋聲明和定義應該更好理解,放到c 環境中用類的方式來理解
"聲明"的嚴謹C 語意,是用以告訴編譯器類型及其細節,例如:
上述聲明僅告訴編譯器有自定義類型MyClass,編譯器僅對其進行語彙分析及名字的決議,并未占用内存!
"定義"的嚴謹C 語意,即内存占有,編譯器将在相對内存地址上為其對象定址!
要注意的是,我們不能簡單的說
string myString;
是聲明還是定義,判斷的原則是看是否占用内存。例如:
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!