C语言 数组初始化的三种常用方法({0}, memset, for循环赋值)以及原理

本文探讨了C语言中初始化数组的三种方法:声明时使用{0}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载链接:https://www.cnblogs.com/fnlingnzb-learner/p/8057257.html

目录

概述

效率:

原理:

结论:

附录:


概述

C语言中,数组初始化的方式主要有三种:

1、声明时,使用 {0} 初始化;

char array[ARRAY_SIZE_MAX] = {0}; 

2、使用memset;

char array[ARRAY_SIZE_MAX];  
memset(array, 0, ARRAY_SIZE_MAX);

3、用for循环赋值。

int i = 0;  
char array[ARRAY_SIZE_MAX];  
for (i = 0; i < ARRAY_SIZE_MAX; i++)  
{  
  array[i] = 0;  
}  

效率:

分别执行上面三种方法,统计下平均时间可以得出:  for循环浪费的时间最多,{0} 与memset 耗时差不多。

原理:

1、for循环,就是循环赋值,不解释了

2、memset,很容易找到memset内部实现代码,这里也不解释了

3、{0} 内部是怎么实现的呢?通过汇编代码可以看出,{0}初始化方式,调用了memset函数!

结论:

对三种方法的选取:

1、for 最浪费时间,不建议(其实memset内部也是用循环实现的,只不过memset经过了严格优化,所以性能更高);

2、{0} 可能有移植性问题,虽然绝大多数编译器看到{0} 都是将数组全部初始化为0, 但是不保证所有编译器都是这样实现的;

3、综合1、2, 推荐使用memset方法。

附录:

这说明了对局部数组没有初始化的元素的值,这几种编译器都将其设置为0.但是,如果不对数组进行初始化,即在定义的同时没有用列表初始化,那么局部数组的值就取决于编译器而对程序员来说就是不可预料的了.有时间可以测试一下各个编译器,不过在vc中是0xcc.所以对局部数组的初始化要特别小心.但是全局的数组和静态数组还是会被正确的赋于0值的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值