memset c1,0,sizeof c1 和我直接定义int c1,有何区别?那个更好?详细解释一下谢谢

2021-04-18 09:52:36 字数 820 阅读 2144

1楼:匿名用户

如果是定义数来组并初始源化,那么int c1[1000]=; 这样看起来更简洁一些

如果c1是动态分配的 或者是在程序中要对c1重新清0 那么只能用memset

memset可以用在任何地方,更灵活

另一种只能用于初始化 效果和memset相同

2楼:匿名用户

区别的话这个完全看编译器怎么实现了,推荐直接使用=这种方式初始化。

有的编回译器对于int c1[1000]=这种写法,会一个机

答器字长一个机器字长的进行清零,有的编译器就用直接调用memset函数进行清零,更高级的编译器就会根据数组的大小来进行选择上面两种方法之一。

对于第一种编译器,当然手动调用memset的方式更好了,一个一个清零会使**段很庞大,运行效率也不会很高。

对于第二种编译器,那完全就是一样的了,没有什么区别。

对于第三种编译器,最高级的,我们相信编译器就可以了。

这种主要就是考虑运行效率的问题,我们知道一次函数调用的开销是很大的。对于小数组,我们没有必要调用一次函数来清零每一个元素,直接使用指令一个一个清零就可以了。对于大数组的话,指令就会变得很多,那么相对来说函数调用的开销就变小了,就选择调用函数来清零。

我们有理由相信现在的编译器都是第三种,直接使用=这种方式,由编译器来帮我们选择最高效的方法来清零就可以了。

说到这个问题上,楼主直接使用memset和=这种方式,对于int c1[1000]这么大的数组来说应该是等价的。

3楼:匿名用户

问题在于你并不总是知道有1000个,所以有时候你得用memset