typedef定义数组

问题来源

在学习高一凡数据结构与算法解析串这一章节时,遇到如下代码不明白其意义,经过查阅终于搞明白

typedef unsigned char SString[MAXLEN + 1];

使用typedef语句定义数组类型

一维数组类型的定义格式

格式:typedef<元素类型关键字><数组类型名>[常量表达式]

例如:

typedef int vector[10];
typedef char strings[80];
typedef short array[N];
  • 第一条语句定义了一个元素类型为int,含有10个元素的数组类型vector,若不使用typedef保留字,则就变成了数组定义,它只定义了一个元素类型为int,含有10个元素的数组vector。这两种定义有着本质的区别,若定义的是数组vector,系统将为它分配有保存10个整数的存储单元,共40个字节的存储空间;若定义的是数组类型vector,系统只是把该类型的有关信息登记下来,待以后利用该类型定义对象时使用,具体地说,就是把vector的元素类型int,类型长度10,类型名vector等登记下来,待以后定义vector类型的对象时使用。

  • 第二条语句定义了一个元素类型为插入,含有80个元素的数组类型strings,以后可以直接用strings类型定义数组对象,每个数组对象的元素为char型,数组长度(即元素个数)为80。

  • 第三条语句定义了一个元素类型为short int的含有N个元素(N为已定义的符号常量)的数组类型array,以后利用它可以直接定义该类型的对象,它是一个含有N个短整型元素的数组。

利用上面的定义可以定义如下的几个对象:

vector v1,v2;
strings s1,s2;
array a;
typedef vector vectorSet[20];
vectorSet vs;
  • 第一条语句定义了一个元素类型为vector,元素个数为20的数组类型vectorSet

  • 第二条语句定义了数据类型为vectorSet的一个对象vs,该对象包含有20个类型为vector的元素,每个元素又包含有10个int类型的元素,所以整个数组共包含有20行10列共200个整数元素,等同于对vs的如下定义

    int vs[20][10];

二维数组类型的定义格式

格式:typedef<元素类型关键字><数组类型名>[<常量表达式1>][<常量表达式2>]

例如:

typedef int matrix[5][5];
typedef char nameTable[10][NN];
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

利用上面三个二维数组类型可以直接定义出相应的二维数组。例如:

matrix mx;
nameTable nt;
DD dd;

对已有类型定义别名

利用typedef语句不仅能够定义数组类型,而且能够对已有类型定义出另一个类型名,以此作为原类型的一个别名。如下:

typedef int inData;
typedef char chData;
typedef char* chPointer;
  • 第一条语句对int类型定义了一个别名inData

  • 第二条语句对char类型定义了一个别名chData

  • 第三条语句对char*类型定义了一个别名chPointer

通过上面的重命名,后面可以直接使用inData,chData和chPointer定义出相应的对象。例如:

inData x,y;
inData a[5] = {1,2,3,4,5};
chData b1,b2 = 'a';
chData c[10] = "char data";
chPointer p = NULL;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/smilesundream/article/details/70161471

typedef定义数组的更多相关文章

  1. typedef定义数组类型

    typedef语句定义数组类型 1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) typedef ...

  2. 使用typedef语句定义数组类型

    使用typedef语句定义数组类型     1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) ty ...

  3. typedef 定义结构体数组或其他数组

    typedef 定义结构体数组或其他数组 C\C++语言下 typedef其实是对一个变量类型的名字进行重新定义,例如下面中: typedef struct { int num[10]; char n ...

  4. C语言定义数组时使用枚举作为数组的下标 ——c99功能

    部分参考了https://blog.csdn.net/wq3028/article/details/76204690 同时在电脑上进行验证 //温度,电磁阀传感器序号,方便数组定位 typedef e ...

  5. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  6. C#中定义数组

    C#定义数组 一.一维:int[] numbers = new int[]{1,2,3,4,5,6}; //不定长 int[] numbers = new int[3]{1,2,3};//定长   二 ...

  7. loadrunner中定义数组

    loadrunner 中数组的定义 loadrunner 中数组的定义: lr_save_string("www.google.com","website_1" ...

  8. typedef定义函数类型或函数指针

    转载请标明出处: 最近在看redis的代码,发现了有关函数指针的部分,想把它记下来. 在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数: typedef vo ...

  9. 动态定义数组 .xml

    pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6; ...

随机推荐

  1. 今天学习了BootStrap

    今天学习了BootStrap 一.BootStrap介绍 Bootstrap是一个前端开发的框架,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.Java ...

  2. 21.6.29 test

    \(NOI\) 模拟赛 \(T1\) 正解是个题解难以理解的数论,结果是组合数相加.暴力分拿满了,尝试打了 \(20*20\) 的表,最后大概打出了个三角形的表,并且帮我找到了一些性质.\(45\)p ...

  3. Android 服务名称规则invalid service name 限制16字符以内

    今天调试网络服务的时候为了区分,修改了原有服务名称,同时新增了两个服务. 系统运行的时候报错找不到对应的服务 init: no such service 'wpa_supplicant_common' ...

  4. 编译内核错误:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373

    最近在编译一个新的rk sdk的时候,编译内核报错 CHK include/linux/version.h CHK include/generated/utsrelease.h make[1]: 'i ...

  5. linux 内核源代码情景分析——linux 内核源码中的汇编语言代码

    1. 用汇编语言编写部分核心代码的原因: ① 操作系统内核中的底层程序直接与硬件打交道,需要用到一些专用的指令,而这些指令在C语言中并无对应的语言成分: ② CPU中的一些特殊指令也没有对应的C语言成 ...

  6. java核心技术 第3章 java基本程序设计结构

    类名规范:以大写字母开头的名词 若由多个单词组成 每个单词的第一个字母应大写(驼峰命名法)  与.java文件名相同 运行程序:java ClassName(dos命令) 打印语句:System.ou ...

  7. 04 | 函数扩展 | es6

    函数参数的默认值 基本用法 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log(x ...

  8. Linux ns 4. UTS Namespace 详解

    目录 1. 使用简介 1.1 hostname 1.2 domainname 1.3 uname 2. 代码分析 2.1 copy_utsname() 2.2 sethostname() 2.3 ge ...

  9. linux 入门系列-基础性知识

    1:初探linux-基于centos7 运维和服务器硬件组合 两种登录方式:(1)-------root:管理员登录权限较高,不建议初学者使用格式: [root@centos7 jinlong]# ( ...

  10. UE4中C++编程(一)

    一: C++工程和Gameplay框架 GameInstance 它适合放置独立于关卡的信息,比如说显示UI. GameMode 表示游戏玩法, 包含游戏进行的规则和胜利条件等等信息,游戏模式是和关卡 ...