sizeof
signed&&unsigned
if...else
volatile
參考文獻
今天剖析一下c語言中的關鍵字。關鍵字大家都不陌生,但是你們能說出有多少個關鍵字麼?或者說這些關鍵字都是幹什麼的麼?register這個關鍵字是幹嘛的呢?
c語言的關鍵字有32種,今天來剖析幾個特殊的。
在這之前,普及兩個概念。這兩個概念我之前也不是很清楚,今天才看到乙個準備的解釋。
宣告:①告訴編譯器,這個名詞匹配了一塊記憶體,如extern int i
②高速編譯器,我這個名字作為預留了,別人地方不能用它
區別:定義建立了物件並且分配了記憶體,宣告沒有分配記憶體
register:這個關鍵字請求編譯器盡可能的將變數存放在暫存器而不是記憶體以提高效率。當然,編譯器可以不聽。
但是register是有限制的:
register變數必須是乙個單個的值,並且其長度應小於或等於整型長度。
register變數可能不存在於記憶體之中,所以不能使用&
來獲取其位址。
static關鍵字主要有三個作用:
靜態全域性變數:修飾作用域從定義之處開始到檔案結尾處結束。
靜態區域性變數:一般被修飾的變數在函式結束之後也不會被銷毀,函式下次還是可以用的。我們來看乙個例子:
static
int i;
void
func1()
void
func2()
intmain()
列印的結果是:1 1
函式前加static關鍵字使函式成為靜態函式,函式的作用域僅限於本檔案
在c++中的類中宣告成員變數為static變數使得變數屬於類而不屬於物件。類中的static所有物件均可訪問。
對該變數的初始化得通過::
進行。
同樣,對於成員方法來說,static呼叫的時候不能通過物件呼叫,只能通過類名+::
進行呼叫。
sizeof我們一般用到它都是來計算變數所佔空間大小。但是在計算變數的時候,其實括號是可以省略的,而計算型別時則不可以。
這兩個是用來表示變數正負的,編譯器在預設的情況下一般都預設指定signed型別的。我們來看下面的乙個例子:
int
main()
pritf
("%d"
,strlen()
);return0;
}
大家可以大膽的猜測答案是什麼。
答案是:255
下面看一下解釋:
計算機內部以補碼形式存在,a[i]的值從-1到-128然後就是127到0。0剛好代表字串結束。
這裡主要注意的就是float型別和0比較。
正確的做法是:
float i =
3.0;if(
(i >=
-epsinon)
&&(i <= epsinon)
)
不要和0.0用==
比較!!!!
在c語言中規定,epsinon為乙個定義好的精度,如果乙個數落在[0.0 - epsinon , 0.0 + epsinon]就認為它的值和零值相同。
這個關鍵字我是真的陌生,基本沒咋用過。
volatile是易變的、不穩定的意思。volatile關鍵字告訴編譯器變數是可能發生變化的,每次使用必須從記憶體中取出,而不是暫存器。
[1] 陳正衝 石 虎.c語言深度剖析.未出版,2020.7.
C語言關鍵字剖析
c語言的關鍵字共有32個,根據關鍵字的作用,可分其為資料型別關鍵字 控制語句關鍵字 儲存型別關鍵字和其它關鍵字四類,下面分類列舉和解釋相關關鍵字 1 char 宣告字元型變數或函式 2 double 宣告雙精度變數或函式 3 enum 宣告列舉型別 4 float 宣告浮點型變數或函式 5 int ...
c 11關鍵字剖析
1 auto 該關鍵字用於兩種情況 1.宣告變數時 根據初始化表示式自動推斷變數型別。2.宣告函式作為函式返回值的佔位符。2static static變數只初始化一次,除此之外它還有可見性的屬性 1.static修飾函式內的 區域性 變數時,表明它不需要在進入或離開函式時建立或銷毀。且僅在函式內可見...
enum關鍵字 C語言深度剖析
列舉型別的定義方式如下 enum enum type name enum const 1,enum const 2,enum const n enum variable name 注意 enum type name是自定義的一種資料型別名,而enum variable name為enum type ...