標籤:使用 資料 ar c++ type table har ef
使用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. 二維數群組類型的定義格式
typedef <元素類型關鍵字><數群組類型名>[<常量運算式1>][<常量運算式2>];
例如:
(1) typedef int matrix[5][5];
(2) typedef char 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語句不僅能夠定義數群組類型,而且能夠對已有類型定義出另一個類型名,以此作為原類型的一個別名。如:
(1) typedef int inData;
(2) typedef char 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)。