无法在C++; 我正在学习C++,我以前在这里学习过java,现在有很多的困惑。 我试图打印布尔值的2D数组,返回#if true,and?如果是假的。我已经尝试过先初始化数组,我认为这是可行的,如果不使用迭代器(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 #包括 void printGrid(bool a[][10]){//为什么这个方法不起作用? 对于(int i=0;i

无法在C++; 我正在学习C++,我以前在这里学习过java,现在有很多的困惑。 我试图打印布尔值的2D数组,返回#if true,and?如果是假的。我已经尝试过先初始化数组,我认为这是可行的,如果不使用迭代器(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 #包括 void printGrid(bool a[][10]){//为什么这个方法不起作用? 对于(int i=0;i,c++,arrays,boolean,C++,Arrays,Boolean,bool a[][10]实际上是bool(*a)[10],因此sizeof(a)是指针的大小 通过引用传递数组: void printGrid(const bool (&a)[10][10]) 使用std::array有一个更直观的界面。这里,您将数组传递给一个函数,该函数被转换为指针,因此您将得到指针的大小 请记住,当传递的格式要求数组衰减时,数组衰减为指针,即如果相应的参数声明为指针(如本例所示)。如果该参数被声明为数组的引用,则不会发生衰减。传递数组大小或使用容器类。@2501

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

通过引用传递数组:

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


使用
std::array
有一个更直观的界面。

这里,您将数组传递给一个函数,该函数被转换为指针,因此您将得到指针的大小


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

传递数组大小或使用容器类。@2501我不明白你的意思。。如上所述,我使用2D integer尝试了相同的方法,该方法将很好地打印2D数组。@crashmstr我不明白你的意思。请指出原因在我的代码中?如果你不通过数组大小,它就不起作用了。一个更好的C++方法是使用容器类。它们知道它们有多大。<代码>错误:main必须返回int < /Code >。我有错误,引用引用数组是非法的。我尝试用int [A] [10 ]编写相同的方法。顺便说一句,它工作得很好。只有在我的带有布尔参数的printGrid方法中没有。@Rei:我提供了一个工作代码链接。我怀疑你错过了数组引用的括号。@Rei你在使用什么编译器?它对我也很好。(Jarod的独立)@Jarod42嗨,对不起,代码成功了,谢谢。但它没有回答我的问题,你能看我编辑的帖子吗?我添加了打印2D数组时使用的printint方法,但我没有使用(&a)[10][10],它成功了。为什么?@Rei:我也回答了这个问题。
sizeof(a)
在您的例子中不是数组的大小,而是指针的大小(主要是4(32位)或8(64位))。
void printGrid(const bool (&a)[10][10])