好的,所以我写了这段代码来打印2D数组的所有元素。但令人惊讶的是,屏幕上没有任何内容。这是代码:
#include <bits/stdc++.h>
using namespace std;
char ans[1001][1001];
void display_ans(int row,int col)
{
for (int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
cout<<ans[i][j];
}
cout<<endl;
}
}
int main()
{
memset(ans,'$',sizeof(ans[0][0])*2*2);
display_ans(2,2);
return 0;
}
屏幕上没有任何内容。这真的很尴尬。我无法理解代码的错误。
答案 0 :(得分:4)
让我们看一下在内存中看起来像一个更小的数组:
char a[3][3];
这就像
+---------+---------+---------+---------+---------+---------+---------+---------+---------+ | a[0][0] | a[0][1] | a[0][2] | a[1][0] | a[1][1] | a[1][2] | a[2][0] | a[2][1] | a[2][2] | +---------+---------+---------+---------+---------+---------+---------+---------+---------+
memset(ans,'$',sizeof(ans[0][0])*2*2);
之类的调用将为四个第一个内存位置设置内存。这与我们上面的示例相同,它将是a[0][0]
,a[0][1]
,a[0][2]
和a[1][0]
。 <... a[2][1]
的内存不会被触及。
对于您的数组,ans[0][0]
是第一个元素,后跟ans[0][1]
,a[0]
之前的所有剩余999个元素a[1][0]
。
这会导致memset
来电设置的元素为ans[0][0]
,ans[0][1]
,ans[0][2]
和ans[0][3]
。 <{1}}的其余内存全部为零。
和 ,因为您使用基于一个索引进行打印,所以打印ans
,ans[1][1]
,ans[1][2]
和{{1 }}。这些都是零。
哦,我发现您更新了问题,这意味着您将打印ans[2][1]
,ans[2][2]
,ans[0][0]
和ans[0][1]
。前两个字符应为ans[1][0]
,而后两个字符仍为零。