二维数组的输出元素

时间:2017-06-22 02:42:07

标签: c++ arrays

我遇到了这个问题:

我想输出二维数组的元素,就像这样

var role= document.getElementById('myrole');

这很好用。但我也遇到了以下方法

char cur[3][3] = {{'.','.','B'},{'B','W','.'},{'B','.','.'}};
for(int x=0;x<3;x++){
   for(int y=0;y<3;y++){
       cout<<cur[x][y];
   }
   cout<<endl;
} 

为什么这种方法运作良好?我无法理解这种方法。有人可以帮我解释一下吗?谢谢。

2 个答案:

答案 0 :(得分:2)

我不知道第二种方法如何“起作用”。它调用未定义的行为,因为您基本上传递了非空终止的char指针。

当您致电cur[0][0]时,它与调用*(*(cur + 0) + 0)相同,因此调用cur[0] + 1*(cur + 0) + 1相同,后者返回指向第一个子数组的第二个元素的指针

当你给cout一个char指针时,它会打印它找到的每个char,直到它达到0,然后停止。假设在每个子阵列的末尾都有一个零,它将打印第二个元素,然后是第三个元素,然后停止,并为每个子阵列执行此操作。

答案 1 :(得分:1)

在第二种方法中,只有在找到空标记“\ 0&#39”时才停止打印,否则,如果在内存中找到它,它将连续打印。

您可以轻松地看到这种情况发生了一些变化:

char cur[3][3] = {{'.','.','B'},{'B','W','\0'},{'B','.','.'}};
for(int x=0;x<3;x++){
    cout<<cur[x]+1<<endl;
}

现在打印:

.BBW
W
..