我遇到了这个问题:
我想输出二维数组的元素,就像这样
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;
}
为什么这种方法运作良好?我无法理解这种方法。有人可以帮我解释一下吗?谢谢。
答案 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
..