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语句之间的区别是什么?
任何答案都将受到高度赞赏。提前谢谢。
答案 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 = 1001
即m
和n
实际上表示数组的维度,则两个调用相同,just two different ways of writing it。