本節專門對第二節曾講述過的指針作一詳述。並介紹Turbo C新的數據類型:結構、聯合和枚舉,其中結構和聯合是以前講過的五種基本數據類型(整型、浮點型、字符型、指針型和無值型)的組合。枚舉是一個被命名為整型常數的集合。
最後對類型說明(typedef)和預處理指令作一闡述。
1、 指針(point)
學習Turbo C語言,如果你不能用指針編寫有效、正確和靈活的程序,可以認為你沒有學好C語言。指針、地址、數組及其相互關系是C語言中最有特色的部分。規范地使用指針, 可以使程序達到簡單明了,因此,我們不但要學會如何正確地使用指針,而且要學會在各種情況下正確地使用指針變量。
1. 指針和地址
1.1 指針基本概念及其指針變量的定義
1.1.1 指針變量的定義
我們知道變量在計算機內是占有一塊存貯區域的,變量的值就存放在這塊區域之中,在計算機內部,通過訪問或修改這塊區域的內容來訪問或修改相應的變量。Turbo C語言中,對於變量的訪問形式之一, 就是先求出變量的地址,然後再通過地址對它進行訪問,這就是這裡所要論述的指針及其指針變量。
所謂變量的指針,實際上指變量的地址。變量的地址雖然在形式上好象類似於整數,但在概念上不同於以前介紹過的整數,它屬於一種新的數據類型,即指針類型。Turbo C中,一般用"指針"來指明這樣一個表達式&x的類型,而用 "地址"作為它的值,也就是說,若x為一整型變量,則表達式&x的類型是指向整數的指針,而它的值是變量x的地址。同樣,若double d; 則&d的類型是指向以精度數d的指針,而&d的值是雙精度變量d的地址。所以,指針和地址是用來敘述一個對象的兩個方面。雖然&x、&d的值分別是整型變量x和雙精度變量d的地址,但&x、&d的類型是不同的,一個是指向整型變量x的指針,而另一個則是指向雙精度變量d的指針。在習慣上,很多情況下指針和地址這兩個術語混用了。
我們可以用下述方法來定義一個指針類型的變量。
int *ip;
首先說明了它是一指針類型的變量,注意在定義中不要漏寫符號"*",否則它為一般的整型變量了。另外,在定義中的int表示該指針變量為指向整型數的指針類型的變量,有時也可稱ip為指向整數的指針。ip是一個變量,它專門存放整型變量的地址。
指針變量的一般定義為:
類型標識符 *標識符;
其中標識符是指針變量的名字,標識符前加了"*"號,表示該變量是指針變量,而最前面的"類型標識符"表示該指針變量所指向的變量的類型。一個指針變量只能指向同一種類型的變量,也就是講,我們不能定義一個指針變量,既能指向一整型變量又能指向雙精度變量。
指針變量在定義中允許帶初始化項。如:
int i, *ip=&i;
注意,這裡是用&i對ip初始化,而不是對*ip初始化。和一般變量一樣,對於外部或靜態指針變量在定義中若不帶初始化項,指針變量被初始化為NULL,它的值為0。Turbo C中規定,當指針值為零時,指針不指向任何有效數據,有時也稱指針為空指針。因此,當調用一個要返回指針的函數(第五節中介紹)時,常使用返回值為NULL來指示函數調用中某些錯誤情況的發生。