typedef到处都是,但是能够真正懂得typedef使用的不算太多。对于初学者而言,看别人的源码时对到处充斥的typedef往往不知所错,而参考书又很少,所以在此给出一个源码,供大家参考。


懂得这些,基本上是 对typedef 合格了, 有时间,我会把c,c++中使用typedef的例子和标准中规定详解解读,敬请期待。

#include <stdio.h>

#include <iostream.h>

/* 避免Visual C的for与标准for的不同 */

#definefor  if (0);  elsefor

/* dim(a)是用于计算a的维数,不过只能计算数组的维数,不能计算指针的维数 */

#define dim(a) (sizeof(a)/sizeof(a[0]))

/* N1到N4是几个常量,以枚举的形式定义 */

enum {N1 = 2, N2 = 3, N3 = 4, N4 = 5};

/* 这个C程序员都知道,就是将DataType定义为int型,便于扩充 */

typedefint DataType;

/* 定义一个一维数组,数组的元素维整型值 */

typedef DataType ARR1[N4];

/* 再定义一个一维数组,数组的元素维ARR1型,不过ARR1又是一个数组,所以

 * ARR2 实际上是一个矩阵

 */

typedef ARR1 ARR2[N3]; /*此处完全等价为typedef int ARR2[N3][N4];*/

/* 按照ARR2的解释,ARR3也是一个一维数组,不过数组元素的类型是ARR2的类型

 * 所有ARR3是一个三维数组

 */

typedef ARR2 ARR3[N2];/* 此处完全等价为typedef int ARR3[N2][N3][N4];*/

/* 分别用定义好的ARR1,ARR2,ARR3定义三个变量a, b, c */

ARR1 a; /* 此处完全等价于:int a[N4]; */

ARR2 b; /* 此处完全等价于:int b[N3][N4]; */

ARR3 c; /* 此处完全等价于:int c[N2][N3][N4]; */

/* 下面函数给大家个示例看a,b,c如何使用 */

void exam_1()

{

    for (int i=0; i<dim(a); i++) a[i] = i+1;

    for (int i=0; i<dim(b); i++)for (int j=0; j<dim(b[0]); j++)

        b[i][j] = (i+1)*10 + (j+1);

    for (int i=0; i<dim(c); i++)for (int j=0; j<dim(c[0]); j++)

        for (int k=0; k<dim(c[0][0]); k++) c[i][j][k] = (i+1)*100 + (j+1)*10 + (k+1);

    printf("\nThe a is :\n");

    for (int i=0; i<dim(a); i++) printf("%4d ", a[i]);

    printf("\n");

    printf("\nThe b is :\n");

    for (int i=0; i<dim(b); i++)

    {

        for (int j=0; j<dim(b[0]); j++) printf("%4d ", b[i][j]);

        printf("\n");

    }

    printf("\nthe c is:\n");

    for (int i=0; i<dim(c); i++)

    {

        for (int j=0; j<dim(c[0]); j++)

        {

            for (int k=0; k<dim(c[0][0]); k++) printf("%4d ", c[i][j][k]);

            printf("\n");

        }

        printf("\n");

    }

}

/* 下面函数给大家演示数组在内存中的排列 */

void exam_2()

{

    int *pn =NULL;

    pn = (int *)a; /*等价于 pn = &a[0]; */

    printf("\nThe a is :\n");

    for (int i=0; i<sizeof(a)/sizeof(DataType); i++) printf("%4d ", pn[i]);

    printf("\n");

    pn = (int *)b; /*等价于 pn = &b[0][0]; */

    printf("\nThe b is :\n");

    for (int i=0; i<sizeof(b)/sizeof(DataType); i++) printf("%4d ", pn[i]);

    printf("\n");

    pn = (int *)c; /*等价于 pn = &c[0][0][0]; */

    printf("\nThe c is :\n");

    for (int i=0; i<sizeof(c)/sizeof(DataType); i++) printf("%4d ", pn[i]);

    printf("\n");

}

int main(int argc,char* argv[])

{

    exam_1();

    exam_2();

    return 0;

typedef 数组使用详解相关推荐

  1. jQuery数组处理详解(含实例演示)

    jQuery的数组处理,便捷,功能齐全. 最近的项目中用到的比较多,深感实用,一步到位的封装了很多原生js数组不能企及的功能. 最近时间紧迫,今天抽了些时间回过头来看 jQuery中文文档 中对数组的 ...

  2. php 数组 指针,php之数组指针详解

    本文主要和大家分享php之数组指针详解,首先我们会和大家分享php 数组指的针操作方法,希望能帮助到大家. 一.php 数组指针操作 利用php的内置函数:key,current,next(),pre ...

  3. (05)System Verilog 数组类型详解

    (05)System Verilog 数组类型详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 数组类型详解 5)结语 1.2 F ...

  4. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  5. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  6. 指针数组与数组指针详解

    指针数组与数组指针详解 1.什么是指针数组和数组指针? 指针数组:指针数组可以说成是"指针的数组",首先这个变量是一个数组,其次,"指针"修饰这个数组,意思是说 ...

  7. 史上最全JavaScript数组对象详解(二)

    JavaScript数组对象详解(二) 上一篇博客我们讲到了JavaScript数组对象的创建,访问和属性,接下来一篇博客主要讲一下JavaScript数组对象的方法及使用.说到数组的方法,主要分为两 ...

  8. C语言(函数指针数组)详解

    要了解函数指针数组,可以从三个角度来分析.所谓函数指针数组,从字面意思上来解析,函数指针数组的组成有三个点,函数,指针,数组.首先我们知道,函数指针数组,是一个数组,数组的每个元素是函数指针,也就是一 ...

  9. 【C语言】结构体定义 typedef struct 用法详解和用法小结

    结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...

最新文章

  1. 使用ramdisk 优化nagios IO性能
  2. mips汇编计算开方_清华考研辅导班-2020清华大学912计算机专业基础综合考研经验真题参考书目...
  3. 如何修改容器的一些参数
  4. [BUUCTF-pwn]——axb_2019_fmt32
  5. 《手机测试Robotium实战教程》——导读
  6. 【Python】Matplotlib绘制可爱机器人
  7. springMVC+Mybatis实现查询分页
  8. MFC操作读取excel文件
  9. 对于制造企业来说,APS的价值在哪里?
  10. delphi延时 4种方法
  11. matlab输入一个正的实数x,VB程序题:用InputBox 输入一个正实数,用Pring方法在一行上显示出它的平方和平方根、立方和立方根,每个数保留三位小数,其间有间隔。...
  12. python导出pdf_是程序员,就用python导出pdf
  13. java pdf转png格式_如何在Java中将PDF转换为PNG或JPG
  14. 差点被祭天!狂欢618,且看研发人如何绝地求生
  15. 水平面:篡命铜钱の1
  16. 随笔(一)—2018-1-23-ANU暑期学校-无题
  17. 马铃薯淀粉生产线的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 淘汰我们的不是这个时代,而是原地踏步的自己
  19. 彻底解决CUDA安装_ 被坑的几个要点
  20. Neuroimage | 孤独症与功能近红外光谱(fNIRS)综述

热门文章

  1. python生成json_生成动态嵌套JSON对象和数组-python - python
  2. 数据结构 - 栈(数组模拟栈操作)
  3. 【HDU - 1302】The Snail (模拟,水题)
  4. Coursera自动驾驶课程第4讲:Safety Assurance for Autonomous Vehicles
  5. RabbitMQ初识
  6. php文件上传并保存路径到数据库,thinkphp表单上传文件并将文件路径保存到数据库中?...
  7. jsonwebtoken jwt token 简单加密
  8. IO字节缓冲流的最简单读写源码
  9. android6.0 sd卡卸载api,android6.0 用户关掉sd卡读取权限的情况下, 还能做到手机缓存么?...
  10. c程序语言习题解答对编程有帮助吗,给C语言编程初学者的10个学习建议,助你学习事半功倍,不要错过...