尝试学习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)
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/GVkxk
如果大小是动态的,则不能使用任何模板版本.您只需要知道C和C++以行主顺序存储数组内容.
适用于可变大小的代码:http://ideone.com/kjHiR