使用typedef語句定義數群組類型

來源:互聯網
上載者:User

標籤:使用   資料   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)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.