我在我的测试中学习C ++,之前我学习过java,现在有很多困惑。 我试图打印布尔的二维数组,返回#如果为真,并且?如果是假的我已经尝试过首先初始化数组,我觉得它很有用,如果我不使用迭代器(printGrid),我可以在某个数组位置打印该值。下面是我的代码
#include<iostream>
void printGrid(bool a[][10]){ // why this method doesn't work?
for(int i = 0; i < sizeof(a)/ (sizeof(*a)) ; i++){
for(int j = 0; j < sizeof(a)/ (sizeof(*a)) ; j++) {
char x = a[i][j] ? '#' : '?'; // i've using the conditional in my std::cout before, still doesn't work
std::cout << x;
}
std::cout<< std::endl;
}
}
void main(){
bool grid[10][10];
for(int i = 0; i < sizeof(grid)/sizeof(*grid) ; i++){
for(int j = 0; j < sizeof(grid)/sizeof(*grid); j++){
grid[i][j] = 1;
}
}
printGrid(grid); // this doesn't work
std::cout<<( (grid[0][1]) ? "#" : "?" ) << std::endl; // this works fine
getchar();
} // main
我在哪里弄错了printGrid? 我尝试使用INT的2D数组而不是相同的设置,功能在main等之外,它工作得很好。任何想法?
编辑:非常感谢答案。我的问题还没有得到解答,我的功能有什么问题?因为我尝试使用具有相同设置的方法,只是不同的参数,并且它工作正常
void printint(int a[][10]){ // why does this work, and the above doesn't?
for(int i = 0; i < 10 ; i++){
for(int j = 0; j < 10 ; j++) {
std::cout <<( (a[i][j] == 10) ? "a" : "b");
}
std::cout << std::endl;
}
}
当我使用printint打印我的2D数组int时,它运行得很好吗?
答案 0 :(得分:2)
bool a[][10]
实际上是bool (*a)[10]
,因此sizeof (a)
是指针的大小。
通过引用传递数组:
void printGrid(const bool (&a)[10][10])
使用std::array<std::array<bool, 10u>, 10u>
具有更直观的界面。
答案 1 :(得分:0)
这里你将数组传递给一个转换为指针的函数,所以你得到的只是指针的大小。
当传递格式请求它们衰减时,即当相应的参数被声明为指针(如本例所示)时,请记住数组衰减为指针。如果参数被声明为对数组的引用,则不会发生衰减