c語言的一些關鍵字

2021-06-29 14:12:13 字數 3016 閱讀 7962

保留關鍵字

char    short     int     unsigned  

long float double struct

union void enum signed

const volatile typedef auto

case continue default do

else for goto if

return switch while sizeof

static extern break register

c99新增關鍵字

_bool   _complex    _imaginary  inline  restrict
const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是像#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干份拷貝。

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

例:下面的**編譯器會報乙個錯誤,請問,哪乙個語句是錯誤的呢?

typedef char * pstr;

char string[4] = "bbc";

const char *p1 =" string"; //1式

const pstr p2 =" string"; //2式

p1++;

p2++;

答案與分析:

問題出在p2++上。

1)const使用的基本形式: const type m;限定m不可變。替換基本形式中的m為1式中的*p1,替換後const char *p1;限定*p1不可變,當然p1是可變的,因此問題中p1++是對的。

替換基本形式中的type為2式中的pstr,替換後const pstr m;限定m不可變,題中的pstr就是一種新型別,因此問題中p2不可 變,p2++是錯誤的。

const只修飾其後的變數,至於const放在型別前還是型別後並沒有區別。如:const int a和int const a都是修飾a為const。注意*不是一種型別,如果*ptype之前是某型別,那麼ptype是指向該型別的指標。

乙個簡單的判斷方法:指標運算子*,是從右到左,那麼如:char const *pcontent,可以理解為char const (* pcontent),即* pcontent為const,而pcontent則是可變的。

在c中,對於const定義的指標,不賦初值編譯不報錯,強烈建議在初始化時說明指標的指向,防止出現野指標。

還有const int *p=&b;是可以的 雖然b不是常量。

但是

const int a=6;

int *p=&a;

會警告,因為它消除了a的const屬性。

(1) 列舉型是乙個集合,集合中的元素(列舉成員)是一些命名的整型常量,元素之間用逗號,隔開。

(2) day是乙個識別符號,可以看成這個集合的名字,是乙個可選項,即是可有可無的項。

(3) 第乙個列舉成員的預設值為整型的0,後續列舉成員的值在前乙個成員上加1。

(4) 可以人為設定列舉成員的值,從而自定義某個範圍內的整數。

(5) 列舉型是預處理指令#define的替代。

(6) 型別定義以分號;結束。

既然列舉也是一種資料型別,那麼它和基本資料型別一樣也可以對變數進行宣告。

方法一:列舉型別的定義和變數的宣告分開

enum day

;enum day yesterday;

enum day today;

enum day tomorrow; //變數tomorrow的型別為列舉型enum day

enum day good_day, bad_day; //變數good_day和bad_day的型別均為列舉型enum day

方法二:型別定義與變數宣告同時進行

enum //跟第乙個定義不同的是,此處的標號day省略,這是允許的。

workday; //變數workday的型別為列舉型enum day

enum week days; //變數days的型別為列舉型enum week

enum boolean end_flag, match_flag; //定義列舉型別並宣告了兩個列舉型變數

方法三:用typedef關鍵字將列舉型別定義成別名,並利用該別名進行變數宣告:

typedef enum workday

workday; //此處的workday為列舉型enum workday的別名

workday today, tomorrow; //變數today和tomorrow的型別為列舉型workday,也即enum workday

enum workday中的workday可以省略:

typedef enum

workday; //此處的workday為列舉型enum workday的別名

workday today, tomorrow; //變數today和tomorrow的型別為列舉型workday,也即enum workday

也可以用這種方式:

typedef enum workday

;workday today, tomorrow; //變數today和tomorrow的型別為列舉型workday,也即enum workday

注意:同乙個程式中不能定義同名的列舉型別,不同的列舉型別中也不能存在同名的命名常量。

c語言的一些關鍵字

1.switch case case後面只能是整型或者字元型的常量或者常量表示式,並且不要忘記了加default switch b case 3 cout a 2.return 關鍵字 return用於終止乙個函式並返回其後面跟著的值,若果是表示式一般加上括號,規範性。但是return 不可以返回指...

C語言的一些關鍵字

c語言作用關鍵字 static const typedef extern register volatile static 1.修飾區域性變數時 在函式體內 乙個被宣告為靜態的變數在函式過程中值保持不變,使得宣告週期延長至程式結束,此時的變數存放區域為資料段上。從而可以少使用全域性變數 const使...

關鍵字 一些關鍵字用法總結

register 用register宣告的變數稱暫存器變數,在可能的情況下會直接存放在機器的暫存器中 但對32位編譯器不起作用,當global optimizations 全域性優化 開的時候,它會做出選擇是否放在自己的暫存器中 不過其它與register關鍵字有關的其它符號都對32位編譯器有效。c...