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

使用typedef语句定义数组类型,布布扣,bubuko.com

时间: 2024-10-12 16:21:29

使用typedef语句定义数组类型的相关文章

传智播客视频学习 ----&gt;&gt;&gt;&gt; typedef 重定义 数据类型

1. typedef 重定义 数组类型 1 typedef int (MyArray)[5]; // 定义了一个数据类型 数组数据类型 2 MyArray myArray; // 相当于 int myArray[5]; 3 4 // 初始化数组内容 5 for ( int i = 0; i < 5; i ++){ 6 myArray[i] = i + 1; 7 } 8 9 // 打印数组内容 10 for ( int i = 0; i < 5; i ++){ 11 printf("m

#define与typedef定义的类型名的区别

1.可以用其他类型说明符对#define定义的类型名进行扩展,但对typedef所定义的类型名不能这样做. 例如: #define peach int unsigned peach i; //加上unsigned类型说明符,正确! typedef int banana; unsigned banana i; //加上unsigned类型说明符,错误! 2.在连续的变量声明中,用typedef定义的类型能够保证声明中的所有变量均为同一种类型,而用#define定义的类型则无法保证. 例如: #de

数组类型

数组名的技术盲点: 1.数组首元素的地址和数组地址时两个不同的概念,虽然它们的值相同,但是执行运算例如加1操作时,移动的步长不一样 2.数组名代表数组首元素的地址,它是一个常量: 变量的本质是内存空间的别名,一定义数组,就分配内存,内存就固定了,所以数组名起名以后就不能更改了.那么为什么指针类型的可以呢?因为指针没有分配具体对象的内存,只是指向一个内存空间. 3.怎样表达int a[10]这样的数据类型呢? 1 #include <stdio.h> 2 int main() 3 { 4 int

数组 类型 在 存储过程中 使用

oracle 之定义数组类型 注:本文来源:<oracle 之定义数组类型 > oracle 数组类型,没有现成的类型,但是可以自己随意定义,很方便. Oracle 数组可以分为定长数组和可变长的数组两类.以下主要是一维数组介绍: 1:定长数组: 1 /*定长字符数组,数组大小为10*/ 2 declare 3 type v_arr is varray(10) of varchar2(30); 4 my_arr v_arr; 5 my_arr:=v_arr('1','2','3'); 6 be

栈的基础操作——2,8,16进制的入栈——数组类型定义

#define stack_init_size 100 #define stackincrement 10 typedef int ElemType; typedef int status; const status error=0; const status ok=1; const status overflow=-2; const int MAXSIZE = 100; typedef struct { ElemType elem[MAXSIZE]; int top; } SqStack; s

DAO语句如何定义属性类型

字体设置:代码 14px 文字 幼圆 15px public interface IAddressDAO { //添加地址 public boolean doCreate(Address address) throws SQLException; //创建需要修改多个字段,直接定义为VO类,从里面获取类型 //删除地址 public boolean doRemoveByAddress(Set<Long>ids) throws SQLException; //删除是根据id进行删除 //查找地址

typedef 各类定义,各类问题大全

第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明. 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述. 2. typedef & 结构的问题 当用下面的代码定义一个结构时,编译器

java基础3_循环语句,数组

java中的循环: Java中提供了3中循环结构:  while  do-while  for ① 循环结构的作用? 可以不断重复执行循环结构中的代码: ② 上面的3个循环结构功能都是一样的,只是结构不一样: ③ 循环的次数的控制 ④ 多种循环结构的语法以及执行流程: ⑤ 能够区分每一种的特点,知道如何选择 while语法: while(条件){ // 循环体,需要重复做的事情的代码 } 执行流程: 上面的这个循环结构可能会执行n次循环 第一次  : 条件(true) ---> 执行一次循环体:

C/C++函数指针(typedef简化定义)

学习要点:        1,函数地址的一般定义和typedef简化定义;        2,函数地址的获取;        3,A函数地址作为B函数参数的传递;    函数存放在内存的代码区域内,它们同样有地址.如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址.    定义一个指向函数的指针用如下的形式,以上面的test()为例:    int (*fp)(int a);//这里就定义了一个指向函数(这个函数的参