无法在C ++中迭代2D数组

时间:2014-10-28 15:32:19

标签: c++ arrays boolean

我在我的测试中学习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时,它运行得很好吗?

2 个答案:

答案 0 :(得分:2)

bool a[][10]实际上是bool (*a)[10],因此sizeof (a)是指针的大小。

通过引用传递数组:

void printGrid(const bool (&a)[10][10])

Live example

使用std::array<std::array<bool, 10u>, 10u>具有更直观的界面。

答案 1 :(得分:0)

这里你将数组传递给一个转换为指针的函数,所以你得到的只是指针的大小。

当传递格式请求它们衰减时,即当相应的参数被声明为指针(如本例所示)时,请记住数组衰减为指针。如果参数被声明为对数组的引用,则不会发生衰减