当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>细论数组维度(dimension)的计算</b>[VC/C++编程]

赞助商链接



  本文“<b>细论数组维度(dimension)的计算</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

我们常常需求知道先前定义的数组维度,或是为了对其举行循环遍历,或是别的.当我们显示初始化数组而没有指定其维度时特别如此:

intis[]={1,2,3};

有C语言开辟经验的读者大概常常利用以下方法来实现:

intdimension=sizeof(is)/sizeof(is[0])

这在大部份情形下都工作得很好.只是敲的键盘次数有点多.所以,有了以下这个宏的呈现:

#defineDIM(a)(sizeof(a)/sizeof(a[0]))

目前就便利多了.但是仍然不完善.考虑下列情形:

宏的参数传入一个重载了operator[]操作符的自定义对象

宏的参数传入一个指针

我们先看第一种情形.当传入一个重载了operator[]操作的对象时(大概您会说:“等等,我绝对不会这样干的.”但是谁会为您担保呢?),编译器并不会给您报错,乃至鄙吝到一条告诫都不会给出.不相信我吗?把以下代码片段拷贝到您的IDE中试试吧.

std::vector<int>vi;
cout<<DIM(vi)<<endl;

“岂有此理,我要把我这该死的编译器换掉!”您先别急,据我所知,目前还没有哪家厂商的编译器会给出错误或告诫提醒,最重要的是,编译器根本没有这个责任.

在办理以上这个问题前,我们先插入一点有关C++数组与指针的知识.

很多情形下,C++中的数组可退化为指针.以下就是一个例子:

intis[]={1,2,3};
int*pi=is;

我们拜候数组时有两种方法:一种称为下标式拜候,另一种称为偏移量拜候.比方,要获得数组is的第二个元素,可辨别采取is[1]和*(is + 1),两种方法等价.实际上,指针也有着一样的特点,也就是说pi[1]或*(pi + 1)也是获得第二个元素.更风趣的是,C++中的内建(build-in)下标式拜候还可倒过来写,即is[1]与1[is]等价.吃惊吧.夸大一下,这种特点只有在内建的下标式拜候时才精确,换句话说,自定义并重载了operator[]操作符的范例是不具有这种特点的.通过vi[1]方法可获得vector的第二个元素,而当您写出1[vi]这样的代码时编译器就报错.

好了,回到我们的问题,我们可以借助上面所提到的C++特点来办理.把DIM宏的定义改正成:

#defineDIM(a)(sizeof(a)/sizeof(0[a]))

第一个问题已被圆满办理.


  以上是“<b>细论数组维度(dimension)的计算</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .