c ++错误:数组下标的类型'int [int]'无效

Ric*_*ick 4 c++

尝试学习C++并在数组上进行简单的练习.

基本上,我已经创建了一个多维数组,我想创建一个打印出值的函数.

Main()中的注释for循环工作正常,但是当我尝试将for循环转换为函数时,它不起作用,对于我的生活,我看不出原因.

#include <iostream>
using namespace std;


void printArray(int theArray[], int numberOfRows, int numberOfColumns);

int main()
{

    int sally[2][3] = {{2,3,4},{8,9,10}};

    printArray(sally,2,3);

//    for(int rows = 0; rows < 2; rows++){
//        for(int columns = 0; columns < 3; columns++){
//            cout << sally[rows][columns] << " ";
//        }
//        cout << endl;
//    }

}

void printArray(int theArray[], int numberOfRows, int numberOfColumns){
    for(int x = 0; x < numberOfRows; x++){
        for(int y = 0; y < numberOfColumns; y++){
            cout << theArray[x][y] << " ";
        }
        cout << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 5

C++从C继承其语法,并努力在语法匹配时保持向后兼容性.因此传递数组就像C一样:长度信息丢失了.

但是,C++确实提供了一种使用引用自动传递长度信息的方法(没有向后兼容性问题,C没有引用):

template<int numberOfRows, int numberOfColumns>
void printArray(int (&theArray)[numberOfRows][numberOfColumns])
{
    for(int x = 0; x < numberOfRows; x++){
        for(int y = 0; y < numberOfColumns; y++){
            cout << theArray[x][y] << " ";
        }
        cout << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/MrYKz

这是一个避免复杂数组引用语法的变体:http://ideone.com/GVkxk

如果大小是动态的,则不能使用任何模板版本.您只需要知道C和C++以行主顺序存储数组内容.

适用于可变大小的代码:http://ideone.com/kjHiR

  • @Tomalek:向后兼容性声明现有的有效C代码在编译为C++时仍应执行相同的操作.这不是有效的C代码,因此不要求行为与C相同. (2认同)