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)。
转自:http://www.cnblogs.com/Jason-Damon/archive/2011/10/23/2222119.html
typedef定义数组类型的更多相关文章
- 使用typedef语句定义数组类型
使用typedef语句定义数组类型 1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) ty ...
- typedef定义数组
typedef定义数组 问题来源 在学习高一凡数据结构与算法解析串这一章节时,遇到如下代码不明白其意义,经过查阅终于搞明白 typedef unsigned char SString[MAXLEN + ...
- typedef定义函数类型或函数指针
转载请标明出处: 最近在看redis的代码,发现了有关函数指针的部分,想把它记下来. 在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数: typedef vo ...
- c语言 数组类型
数组类型重命名数组类型由元素类型和数组大小共同决定数组指针是一个指针,只想对应类型的数组指针数组是一个数组,其中每个元素都是指针数组指针遵循指针运算法则指针数组拥有c语言数组的各种特性 c通过type ...
- C 数组类型语法总结
数组类型语法总结 数组指针 和 指针数组 区分 数组指针是一个指针,只对应类型的数组.指针数组是一个数组,其中每个元素都是指针 数组指针遵循指针运算法则.指针数组拥有c语言数组的各种特性 数组类型重命 ...
- typedef 定义结构体数组或其他数组
typedef 定义结构体数组或其他数组 C\C++语言下 typedef其实是对一个变量类型的名字进行重新定义,例如下面中: typedef struct { int num[10]; char n ...
- C++------------typedef 函数指针类型定义
摘要bycrazyhacking: typedef 是定义了一种"函数指针"类型,可以再声明很多变量.函数指针的定义是定义了一个变量. int max(int x,i ...
- [转]引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用
一.背景 使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名. 最近在写c++代码的时 ...
- C语言 数组类型与数组指针类型
//数组类型与数组指针类型 #include<stdio.h> #include<stdlib.h> #include<string.h> void main(){ ...
随机推荐
- python redis操作数据库方法
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- divide&conquer:find max array
package max_subarrayy;import java.lang.Math;public class max_subarrayy { private static int[] array; ...
- HDU 6092 17多校5 Rikka with Subset(dp+思维)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- 【Python】数据库练习-2
1. 数据库一般作为存储作用,一般不用函数操作 2. 一次插入多条数据
- Eclipse 通过JPA自动生成注解实体
hibernate是JPA最常用的实现之一,而且hiberante自身也对注释语法进行了支持.现在再不用去看那一堆堆的XML映射了.而且eclipse还提供了从数据库直接生成Entity Class的 ...
- spring mvc EL ModelAndView的 Model 值 在jsp中不显示
问题:spring mvc开发过程中, 经常会给model addAttribute, 然后通过EL在jsp中显示,比如 ${msg}, 但是有时候会出现jsp最后显示的还是${msg},而不是msg ...
- jQuery的效果(动画)
jquery的效果(动画) show 概念:显示隐藏的匹配元素 语法:show(speed,callback) 参数:speed:三种预定速度之一的字符串('slow','normal','fast' ...
- 完整的AJAX
$.ajax({url:"请求路径",data:{"key":前端传入后台处理的数据},type:"post", //请求方式dataTyp ...
- MyBatis like函数使用注意事项
百分号后面必须要加上空格,不然会将后面的字符串全部都黏在一起,导致sql语句运行报错
- 小米4c刷LineageOS
注意,本文仅限于小米4c,其他手机仅可参考步骤.如下rom,su,gapps包的下载都是小米4c的,深刷miflash也仅适用于小米手机.准备工作:请自行备份好手机内的个人资料. 电脑环境,usb驱动 ...