这两个内存集有什么区别?


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函数采用目的地、值和计数。 计数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实际上表示数组的维度,那么这两个调用是相同的,只是两种不同的编写方式。

相关内容

最新更新