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. ⼆维数组类型的定义格式
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)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论