1. 程式人生 > >C語言入門(4)——常量、變數與賦值

C語言入門(4)——常量、變數與賦值

對於基本資料型別量,按其取值是否可改變又分為常量和變數兩種。在程式執行過程中,其值不發生改變的量稱為常量,其值可變的量稱為變數。它們可與資料型別結合起來分類。

常量

常量有字元常量(CharacterConstant)、數字常量和列舉常量。列舉常量以後再介紹,現在我們看看如何使用字元常量和數字常量:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
         printf("character: %c\ninteger:%d\nfloating point: %f\n", 'A', 34, 3.14);
         system("pause");
         return 0;
}

字元常量要用單引號括起來,例如上面的'}',注意單引號只能括一個字元而不能像雙引號那樣括一串字元,字元常量也可以是一個轉義序列,例如'\n',這時雖然單引號括了兩個字元,但實際上只表示一個字元。和字串字面值中使用轉義序列有一點區別,如果在字元常量中要表示雙引號"和問號?,既可以使用轉義序列\"和\?,也可以直接用字元"和?,而要表示'和\則必須使用轉義序列。

計算機中整數和小數的內部表示方式不同,因而在C語言中是兩種不同的型別,例如上例的34和3.14,小數在計算機術語中稱為浮點數(Floating Point)。這個語句的輸出結果和Hello world不太一樣,字串"character: %c\ninteger: %d\nfloating point: %f\n"並不是按原樣列印輸出的,而是輸出成這樣:

  

符號常量

在C語言中,可以用一個識別符號來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:

#define 識別符號 常量

其中#define是一條預處理命令(預處理命令都以"#"開頭),稱為巨集定義命令,其功能是把該識別符號定義為其後的常量值。一經定義,以後在程式中所有出現該識別符號的地方均代之以該常量值。

習慣上符號常量的識別符號用大寫字母,變數識別符號用小寫字母,以示區別。

符號常量的使用: 

#include<stdio.h>
#include<stdlib.h>
#define PRICE 30
int main()
{
         int num, total;
         num= 10;
         total= num * PRICE;
         printf("total= %d \n", total);
         system("pause");
         return 0;
}

幾點說明:

用識別符號代表一個常量,稱為符號常量。

符號常量與變數不同,它的值在其作用域內不能改變,也不能再被賦值。

使用符號常量的好處是:含義清楚;能做到“一改全改”。

變數

 其值可以改變的量稱為變數。變數是計算機儲存器中的一塊命名的空間,可以在裡面儲存一個值,儲存的值是可以隨時變的,比如這次存個字元'a'下次存個字元'b',正因為變數的值可以隨時變所以才叫變數。常量有不同的型別,因此變數也有不同的型別,變數的型別也決定了它所佔的儲存空間的大小。

變數定義必須放在變數使用之前。一般放在函式體的開頭部分。要區分變數名和變數值是兩個不同的概念。


 變數定義舉例:

int num,total;
double price = 123.123;
char a = 'a', abc;

應該給變數起有意義的名字。從這個例子中我們也看到兩個同樣型別的變數可以定義在同一行。需要注意,變數的命名有一定限制,規定必須以字母或下劃線_開頭,後面可以跟若干個字母、數字、下劃線,但不能有其它字元。例如這些是合法的變數名:Abc、__abc__、_123。但這些是不合法的變數名:3abc、ab$。其實這個規則不僅適用於變數名,也適用於所有可以由程式設計師起名字的語法元素,例如以後要講的函式名、巨集定義、結構體成員名等等,在C語言中這些統稱為識別符號。

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

賦值

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

char firstletter;
int hour, minute;
firstletter = 'a';       /* 把firstletter賦值 'a' */
hour = 11;           /* 給hour賦值 */
minute = 59;         /* 給minute 賦值 */

注意,變數一定要先定義再使用,編譯器必須先看到你的定義語句,才知道firstletter、hour和minute是變數名,代表一塊儲存空間,下面使用時才知道去哪裡找這個變數的儲存空間。還要注意,這裡的等號不表示數學裡的相等關係,和1+1=2的等號是不同的,這裡的等號表示賦值。在數學上不會有i=i+1這種等式成立,而在C語言中,這個語句表示把變數i的儲存空間中的值取出來,再加上1,得到的結果再存回i的儲存空間中。再比如,在數學上a=7和7=a是一樣的,而在C語言中,後者是不合法的。總結一下:定義一個變數,就是分配一塊儲存空間並給它命名;給一個變數賦值,就是把一個值存到了這塊儲存空間中。變數的定義和賦值也可以一步完成,這稱為變數的初始化,例如要達到上面程式碼的效果也可以這樣寫:
char firstletter = 'a';
int hour = 11, minute = 59;

初始化是一種特殊的變數定義語句,而不是一種賦值語句。就目前來看,先定義一個變數再給它賦值和定義這個變數的同時給它初始化所達到的效果是一樣的,事實上C語言的很多語法規則既適用於賦值也適用於初始化,但在以後的學習中你也會了解到它們之間的不同,請在學習過程中注意總結賦值和初始化的相同之處和不同之處。

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

int hour, minute;
hour = "Hello.";       /* 錯誤!*/
minute = "59";         /* 錯誤! */

注意第3個語句,把"59"賦給minute看起來像是對的,但是型別不對,字串不能賦給整型變數。既然可以為變數的儲存空間賦值,就應該可以把值取出來用,現在我們取出這些變數的值用printf列印:

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

也就是說,變數名除了用在等號左邊表示賦值之外,用在別的地方都表示把它的值取出來替換在那裡。在計算機中不同型別的變數所佔的儲存空間大小是不同的,變數的最小儲存單位是位元組(Byte),在C語言中char型變數的儲存空間是一個位元組,其它型別的變數佔多少個位元組在不同平臺上有不同的規定,以後再詳細討論。

相關推薦

C語言入門4——常量變數

對於基本資料型別量,按其取值是否可改變又分為常量和變數兩種。在程式執行過程中,其值不發生改變的量稱為常量,其值可變的量稱為變數。它們可與資料型別結合起來分類。常量常量有字元常量(CharacterConstant)、數字常量和列舉常量。列舉常量以後再介紹,現在我們看看如何使用

C語言入門之switch迴圈語句

switch格式 switch格式: switch (條件表示式) { case 整數: // case可以有一個或多個 語句; break; case 整數: // case可以有一個或多個 語句;

C語言入門之include多檔案開發

include基本概念 #include <stdio.h> // 告訴系統printf函式是存在的, 告訴系統printf函式的格式(宣告printf函式) // include的作用

C語言入門之運算子sizeof運算子if表示式

型別轉換、型別提升 #include <stdio.h> void test(); int main(int argc, const char * argv[]) { // 1.型別轉換 /* // int 佔用4個位元組 double

Go語言入門特性安裝環境搭建第一個程序等

以及 rec 推出 eas log tell run 線程 package Go語言是谷歌推出的一種全新的編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發Go,是因為過去10多年間軟件開發的難度令人

手把手教你構建 C 語言編譯器4

本章我們將講解遞迴下降的方法,並用它完成一個基本的四則運算的語法分析器。 手把手教你構建 C 語言編譯器系列共有10個部分: 什麼是遞迴下降 傳統上,編寫語法分析器有兩種方法,一種是自頂向下,一種是自底向上。自頂向下是從起始非終結符開始,不斷地對非終結符進行分解,直到匹配輸入的終結符;自底向上是不斷地將終

C語言例子4獲取當前日期及時間

#include<time.h> int main() { time_t timep; struct tm *p; time (&timep); p=gmtime(&timep); printf("%d/%d/%d\n",

Go語言入門4dep包管理

1. 什麼是dep? dep和go,在一定程度上相當於maven之於Java,composer之於PHP,dep是go語言官方的一個包管理工具。 相比較go get而言,dep可以直接給引入的第三方包

手把手教你做一個 C 語言編譯器4:遞迴下降

本章我們將講解遞迴下降的方法,並用它完成一個基本的四則運算的語法分析器。 本系列: 什麼是遞迴下降 傳統上,編寫語法分析器有兩種方法,一種是自頂向下,一種是自底自上。自頂向下是從起始非終結符開始,不斷地對非終結符進行分解,直到匹配輸入的終結符;自底向上是不斷地將終

C語言入門

--------------本人C#程式設計師,因為對c語言有濃厚的興趣,故自行研究,寫的不好之處可以評論告訴我,互相交流 。 C語言入門篇(一) 1.計算機的組成   計算機的組成分為硬體系統和軟體系統   (1)硬體系統:           主機:中央處理器,記憶體等   

簡單點,switch-case的結構簡單點~ C語言學習4

前言 最近將程序看完了,但是感覺自己理解的還不是很全面,執行緒看不進去,就無聊看了後面的訊號,看到了裡面要用函式指標,自己對它一直是一知半解,翻看《C和指標》,想到了一些很有趣的東西。簡化繁複的switch-case結構。 函式指標 C程式在呼叫函式時,都

C語言入門6——C語言常用數學函式

在編碼過程中會經遇到數學運算,幸運的是C語言提供了非常豐富的數學函式庫。在數學中使用函式有時候書寫可以省略括號,而C語言要求一定要加上括號,例如sin(pi/2)這種形式。在C語言的術語中,pi/2是引數,sin是函式,sin(pi/2)是函式呼叫。函式呼叫也是一種表示式。這

C語言入門條件語句

 條件語句 前言 一個表示式的返回值都可以用來判斷真假,除非沒有任何返回值的void型和返回無法判斷真假的結構。當表示式的值不等於0時,它就是“真”,否則就是假。一樣個表示式可以包含其他表示式和運算子,並且基於整個表示式的運算結果可以得到一個真/假的條件值。因此,當一個表示

c#基礎入門5——FileFileStreamStreamReaderStreamWriter

File File的用法如下: public void OperateFile() { //example檔案初始內容截圖如圖一 string filePath = @"e:\Study\test\example.txt"; if (F

C語言入門15——結構體資料抽象

大多數的計算機運算是對現實世界的模擬,如果想用計算機來模擬現實世界需要用到資料抽象的方法。所謂抽象是從實際的人、物、事和概念中抽取所關心的共同特徵,,忽略非本質的細節,吧這些特徵用各種概念精確的加以描述,從而使這些概念構成某種對現實世界進行描述的模型。下面以數學中的複數為例項

深入淺出數據結構C語言22——排序決策樹桶式排序

不改變 自然 只需要 都是 變種 限定 style buck oid   在(17)中我們對排序算法進行了簡單的分析,並得出了兩個結論:   1.只進行相鄰元素交換的排序算法時間復雜度為O(N2)   2.要想時間復雜度低於O(N2),算法必須進行遠距離的元素交換     

Go語言入門3beego的安裝使用

1. 安裝庫 go get -u github.com/astaxie/beego 再安裝bee go get -u github.com/beego/bee 2. 配置bee的環境變數 在環境變

C語言系列記憶體的分配釋放

首先我們來科普一下: 什麼是堆?說到堆,又忍不住說到了棧!什麼是 棧? 1、什麼是堆:堆是大家共有的空間,分全域性堆和區域性堆。全域性堆就是所有沒有分配的空間,區域性堆就是使用者分配的空間。堆在作業系統對程序 初始化的時候分配,執行過程中也可以向系統

C語言學習指標3 字串指標

字串與指標 1.用字元指標指向一個字串 char* str = “Hello”; C語言對字串常量是按字元陣列處理的,因此這裡實際上是把字串第一個元素的地址賦給str。 2.將a字串複製給b字串 方法1: voidmain() { char

C語言入門廿二之預處理指令巨集條件編譯檔案包含typedefconst

預處理指令 什麼是預處理指令: 在我們的檔案翻譯成0和1之前做的操作我們稱之為預處理指令。一般情況預處理指令都是以#號開頭的。 巨集定義的格式 不帶引數的巨集定義: #define 巨集名 值 巨集定義的作用: