天天看點

使用typedef語句定義數組類型

使用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)。