这两个memset之间的区别是什么?

时间:2016-03-07 05:59:44

标签: c++ c memset

int color[1001][1001];
int m,n;
m=10;
n=10;
memset(color,0,sizeof(color));
memset(color,0,sizeof(color[0][0])*m*n );

这两个memset语句之间的区别是什么?

任何答案都将受到高度赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:5)

  

这两个memset语句有什么区别?

memset函数,目标,值和计数。计数为sizeof(color),第一次通话时为sizeof(int) * 1001 * 1001

对于第二个,它将是sizeof(int) * 10 * 10

前者使用零清除整个数组,而后者仅部分地执行,从color[0][0]color[0][99],这依赖于数组按行主要布局的事实。相关摘录自C11标准(草案n1570),§6.5.2.1数组下标

  

[...]由此得出,数组以行主要顺序存储(最后一个下标变化最快)。

或者,如果m = n = 1001mn实际上表示数组的维度,则两个调用相同,just two different ways of writing it