c語言部分知識

2021-03-03 23:17:19 字數 2525 閱讀 2650

char firstletter;

char lastletter;

int hour, minute;

我們可以猜得到這些變數是用來存什麼的,前兩個變數的取值範圍應該是'a'~'z'或'a'~'z',變數hour的取值範圍應該是0~23,變數minute的取值範圍應該是0~59,所以應該給變數起有意義的名字。從這個例子中我們也看到兩個相同型別的變數(hour和minute)可以一起宣告。

給變數起名有一定的限制,c語言規定必須以字母或下劃線_(underscore)開頭,後面可以跟若干個字母、數字、下劃線,但不能有其它字元。例如這些是合法的變數名:abc、__abc__、_123。

但這些是不合法的變數名:3abc、ab$。其實這個規則不僅適用於變數名,也適用於所有可以由程式設計師起名的語法元素,例如以後要講的函式名、巨集定義、結構體成員名等,在c語言中這些統稱為識別符號(identifier)。

另外要注意,表示型別的char、int、float、double等雖然符合上述規則,但也不能用作識別符號。在c語言中有些單詞有特殊意義,不允許用作識別符號,這些單詞稱為關鍵字(keyword)或保留字(reserved word)。通常用於程式設計的文字編輯器都會高亮顯示(highlight)這些關鍵字,所以只要小心一點通常不會誤用作識別符號。

c99規定的關鍵字有:

autobreakcasecharconstcontinuedefaultdodouble

elseenumexternfloatf***otoifinlineintlong

還有一點要注意,一般來說應避免使用以下劃線開頭的識別符號,以下劃線開頭的識別符號只要不和c語言關鍵字衝突的都是合法的,但是往往被編譯器用作一些功能擴充套件,c標準庫也定義了很多以下劃線開頭的識別符號,所以除非你對編譯器和c標準庫特別清楚,一般應避免使用這種識別符號,以免造成命名衝突。

請記住:理解乙個概念不是把定義背下來就行了,一定要理解它的外延和內涵,也就是什麼情況屬於這個概念,什麼情況不屬於這個概念,什麼情況雖然屬於這個概念但一般推薦的做法(best practice)是要盡量避免這種情況,這才算是真正理解了。

賦值:定義了變數之後,我們要把值存到它們所表示的儲存空間裡,可以用賦值(assignment)語句實現:

char firstletter;

int hour, minute;

firstletter = 'a'; /* give firstletter the value 'a' */

hour = 11assign the value 11 to hour */

minute = 59set minute to 59 */

注意變數一定要先宣告後使用,編譯器必須先看到變數宣告,才知道firstletter、hour和minute是變數名,各自代表一塊儲存空間。另外,變數宣告中的型別表明這個變數代表多大的一塊儲存空間,這樣編譯器才知道如何讀寫這塊儲存空間。還要注意,這裡的等號不表示數學裡的相等關係,和1+1=2的等號是不同的,這裡的等號表示賦值。

在數學上不會有i=i+1這種等式成立,而在c語言中表示把變數i的儲存空間中的值取出來,再加上1,得到的結果再存回i的儲存空間中。再比如,在數學上a=7和7=a是一樣的,而在c語言中後者是不合法的。總結一下:

定義乙個變數,就是分配一塊儲存空間並給它命名;給乙個變數賦值,就是把乙個值儲存到這塊儲存空間中。變數的定義和賦值也可以一步完成,這稱為變數的初始化(initialization),例如要達到上面**的效果也可以這樣寫:

char firstletter = 'a';

int hour = 11, minute = 59;

在初始化語句中,等號右邊的值叫做initializer,例如上面的'a'、11和59。注意,初始化是一種特殊的宣告,而不是一種賦值語句。就目前來看,先定義乙個變數再給它賦值和定義這個變數的同時給它初始化所達到的效果是一樣的,c語言的很多語法規則既適用於賦值也適用於初始化,但在以後的學習中你也會了解到它們之間的不同,請在學習過程中注意總結賦值和初始化的相同和不同之處。

如果在紙上「跑」乙個程式(每個初學程式設計的人都要練這項基本功),可以用乙個框表示變數的儲存空間,在框的外邊標上變數名,在框裡記上它的值,如下圖所示。

圖2.1.在紙上表示變數

你可以用不同形狀的框表示不同型別的變數,這樣可以提醒你給變數賦的值必須符合它的型別。如果所賦的值和變數的型別不符會導致編譯器報警告或報錯(這是一種語義錯誤),例如:

int hour, minute;

hour = "hellowrong ! */

minute = "59wrong !! */

注意第3個語句,把"59"賦給minute看起來像是對的,但是型別不對,字串不能賦給整型變數。

既然可以為變數的儲存空間賦值,就應該可以把值取出來用,現在我們取出這些變數的值用printf列印:

printf("current time is %d:%d", hour, minute);

變數名用在等號左邊表示賦值,而用在printf中表示把它的儲存空間中的值取出來替換在那裡。不同型別的變數所佔的儲存空間大小是不同的,資料表示方式也不同,變數的最小儲存單位是位元組(byte),在c語言中char型變數佔乙個位元組,其它型別的變數佔多少位元組在不同平台上有不同的規定,將以後慢慢解釋。

C語言 c 部分面試試題

三 sizeof的結果 sizeof操作符的結果型別是size t,它在標頭檔案 中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。1 若運算元具有型別char unsigned char或signed char,其結果等於1。ansi c正式規定字元...

C語言基礎知識部分練習題

練習題一 c語言基礎知識 1.以下不是c語言的特點的是 a 語言簡潔緊湊 b 能夠編制出功能複雜的程式 c c語言可以直接對硬體操作 d c語言移植性好 2.下列字串行中,不可用作c語言識別符號的是 a abc123 b no.1c 123d ok 3.正確的c語言識別符號是 a a buy 2 b...

c語言考試總結知識

總體上必須清楚的 1 程式結構是三種 順序結構 迴圈結構 三個迴圈結構 選擇結構 if 和 switch 2 讀程式都要從main 入口,然後從最上面順序往下讀 碰到迴圈做迴圈,碰到選擇做選擇 3 計算機的資料在電腦中儲存是以二進位制的形式.資料存放的位置就是他的位址.4 bit是位是指為0 或者1...