分享
 
 
 

数组的智能初始化

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

数组的智能初始化

不少人使用的数组初始化方法是这样的:

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有