C++ 什么';这两个memset有什么区别?

C++ 什么';这两个memset有什么区别?,c++,c,memset,C++,C,Memset,这两个memset语句之间有什么区别 任何答复都将不胜感激。提前谢谢 这两个memset语句之间有什么区别 memset函数获取目标、值和计数。计数为sizeof(color),第一次调用的计数为sizeof(int)*1001*1001 第二个是sizeof(int)*10*10 前者用零清除整个数组,而后者仅部分清除,从color[0][0]到color[0][99],这取决于数组是按行排列的。C11标准(草案n1570)的相关摘录,§6.5.2.1阵列订阅: […]由此可知,数组按行主顺序

这两个memset语句之间有什么区别

任何答复都将不胜感激。提前谢谢

这两个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
实际上表示数组的维度,那么这两个调用是相同的,

第二个调用使用未定义的变量
m
,并且
n
@AlgirdasPreidžius,我已经编辑了提供m和n值的原始问题。@e0k,第一个是编译。我已经编辑了原来的问题。除非你想要一个愚蠢的答案,否则你应该有
m=1001
n=1001
要检查
sizeof(color)
sizeof(color[0][0])
是什么有那么难吗?第二个是
sizeof(color[0][0])
不是
sizeof(int)
@shibly:因为
color[0][0]
是一个
int
,正确的说法是
sizeof(color[0][0])==sizeof(int)
,因此给出的公式是准确的。“前者用零清除整个数组,而后者只部分清除。”-这是正确的,但也值得注意的是后者通过
color[0][0]清除
[99]
,而不是
颜色[i][j]
表示
i
j
值0..9。
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 );