• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

数组的智能初始化

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 16次 | 进入软件测试论坛讨论

领测软件测试网

数组的智能初始化
   不少人使用的数组初始化方法是这样的:
int a[100];
for (int i = 0; i < sizeof(a); i++) a[i] = 0;

    一个for循环的初始化方法效率显然不够高,代码也不够漂亮。其实 C++ Standard Library早已为我们提供了一个又与初始化的强力工具 memset。
void  memset(void *s, int c, size_t n);

    memset就是把从地址s开始的内存以字符c写入,直到有n个这样的字符被写入为止。
    因此,我们利用这个强力工具来替换for循环。代码看起来漂亮多了。另外,由于memset使用底层的内存操作,效率要比for来得高。
int a[100];
memset(a, 0, sizeof(a) );

      但是,一般而言我们并不是要把我们定义的数组用´a´或者什么别的字符初始化。0(NULL)才是初始化中最常用的值。基于这个事实,编译器为我们提供了智能初始化的方法。这种方法既快捷又简明。
int a[100] = {0};

       有人也许以为这种形式的初始化只会令a[0]为0而其他的并不会被初始化为0。但事实并不是这样的。在标准C++中,一旦你在数组定义时就对其使用´{ }´初始化,不论´{´与´}´之间的数值是多少(当然给比数组的上界小了)编译器会自动给你没有初始化的项用0初始化。因此上面的语句实际上把数组a的所有项都初始化为0了。
    如果你还不太理解或是不相信,可以看看下面的小程序,在你的机器上跑一跑。实践是检验真理的唯一标准嘛。
///: show the initialization of an array

#include <iostream>

using namespace std;

enum {array_size = 6};

void watch(const int *x) { // go through the whole array

 for (int i = 0; i < array_size; i++)
  cout << "  x[" << i << "] = " << x[i] ;

 cout << endl;
 
}

void main() {

 int a[array_size] = {0};

 int b[array_size] = {1};
 
 int c[array_size] = {1,2,3};
 
 int d[array_size]; //the compiler may give a warning for
    //not initializing the array
 
 watch(a);
 watch(b);
 watch(c);
 watch(d);

}

///:~

 

以下是输出的结果:
x[0] = 0 x[1] = 0 x[2] = 0 x[3] = 0 x[4] = 0 x[5] = 0
x[0] = 1 x[1] = 0 x[2] = 0 x[3] = 0 x[4] = 0 x[5] = 0
x[0] = 1 x[1] = 2 x[2] = 3 x[3] = 0 x[4] = 0 x[5] = 0
x[0] = 2008948808 x[1] = 37879496 x[2] = 2009050137 x[3] = 37879776 x[4] =
2009087664 x[5] = 2008948784

 

 


文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网