使用typedef語句定義數組類型
1.
一維數組類型的定義格式
typedef
<元素類型關鍵字><數組類型名>[<常量表達式>];
例如:
(1) typedef int
vector[10];
(2) typedef char
strings[80];
(3) typedef short int
array[N];
第一條語句定義了一個元素類型為int,含有10個元素的數組類型vector,若不使用typedef保留字,則就變成了數組定義,它隻定義了一個元素類型為int、含有10個元素的數組vector。這兩種定義有着本質的差別,若定義的是數組vector,系統将為它配置設定有儲存10個整數的存儲單元,共40個位元組的存儲空間;若定義的是數組類型vector,系統隻是把該類型的有關資訊登記下來,待以後利用該類型定義對象時使用,具體地說,就是把vector的元素類型int,類型長度10,類型名vectoe等登記下來,待以後定義vector類型的對象時使用。
第二條語句定義了一個元素類型為char,含有80個元素的數組類型strings,以後可以直接使用strings類型定義數組對象,每個數組對象的元素為char型,數組長度(即元素個數)為80。
第三條語句定義了一個元素類型為short
int的含有N個元素(N為已定義的符号常量)的數組類型array,以後利用它可以直接定義該類型的對象,它是一個含有N個短整型元素的數組。
下面是利用上述類型定義對象的一些例子。
(1) vector
v1,v2;
(2) strings
s1,s2="define type";
(3) array
a={25,36,19,48,44,50}; //假定常量N≥6
第一條語句定義了vector類型的兩個對象v1和v2,每個對象都是vector類型的一個數組,每個數組由10個整型元素所組成。
第二條語句定義了strings類型的三個對象s1,s2和s3,并且對s3進行了初始化,每個對象都是含有80個字元空間的數組。
第三條語句定義了一個array類型的對象a,它是一個含有N個短整型元素的數組,該語句同時對數組a進行了初始化,使得a[0]~a[5]的元素值依次為25,36,19,48,44和50。
2.
二維數組類型的定義格式
<元素類型關鍵字><數組類型名>[<常量表達式1>][<常量表達式2>];
matrix[5][5];
nameTable[10][NN];
(3) typedef double
DD[M+1][N+1];
第一條語句定義了含有5行5列共25個int型元素的數組類型matrix,第二條語句定義了10行NN列共10*NN個char型元素的數組類型nameTable,第三條語句定義了含有M+1行N+1列共(M+1)*(N+1)個double類型元素的數組類型DD。
利用這三個二維數組類型可以直接定義出相應的二維數組。如:
(1) matrix
mx={{0}};
(2) nameTable
nt={""}; //或使用等同的{{‘\0‘}}初始化
(3) DD
dd={{0.0}};
第一條語句定義了二維整型數組類型matrix的一個對象mx,該對象是一個5*5的二維整型數組,每個元素均被初始化為0;第二條語句定義了二維字元數組類型nameTable
的一個二維字元數組nt,該數組中的每個元素均被初始化為空字元;第三條語句定義了二維雙精度數組類型DD的一個數組dd,它的每個元素均被初始化為0.0。
在typedef語句中,<元素類型關鍵字>可以是C++語言中預定義的任何一種資料類型,也可以是使用者在前面已定義的任何一種資料類型,是以通過該語句定義的類型同樣可以用在其後的typedef語句中。如:
(1) typedef vector
vectorSet[20];
(2) vectorSet
vs;
第一條語句定義了元素類型為vector,元素個數為20的一個數組類型vectorSet,第二條語句定義了資料類型為vectorSet的一個對象vs,該對象包含有20個類型為vector的元素,每個元素又包含有10個int類型的元素,是以整個數組共包含有20行10列共200個整數元素,它等同于對vs的如下定義:
int
vs[20][10];
利用typedef語句同樣可以定義更高維的數組類型,這裡就不進行讨論了。
3.
對已有類型定義别名
利用typedef語句不僅能夠定義數組類型,而且能夠對已有類型定義出另一個類型名,以此作為原類型的一個别名。如:
inData;
chData;
(3) typedef char*
chPointer;
第一條語句對int類型定義了一個别名inData,第二條語句對char類型定義了一個别名chData,第三條語句對char*類型(它是字元指針類型)定義了一個别名chPointer。以後使用inData,chData和chPointer就如同分别使用int,char和char*一樣,定義出相應的對象。如:
(1) inData
x,y;
(2) inData
a[5]={1,2,3,4,5};
(3) chData
b1,b2=‘a‘;
(4) chData c[10]="char
data";
(5) chPointer
p=0;
第一條語句定義了inData(即int)型的兩個變量x和y,第二條語句定義了元素類型為int的一維數組a[5]并進行了初始化,第三條語句定義了chData(即char)型的兩個變量b1和b2,并把b2初始化為’a’,
第四條語句定義了一個字元數組c[10]并初始化為”char data”,
第五條語句定義了一個字元指針變量p,并初始化為0(即NULL)。