Mik*_* N. 1 c++ arrays pointers function
就像问题所说的那样,我试图将多维数组传递给函数,将其打印到工程项目的文件中.输入数据的格式不能更改,所以请不要建议我只是将其输入为不同的数据类型.
这个特殊的函数预期一个二维数组(虽然我有其他三维后的数据),直到运行时才知道数组的大小.我知道我必须使用指针分别指向数组的每一行,但我不知道将它传递给函数的语法是什么.在下面的代码中,有问题的数组是'block'.主要功能只是我尝试使其工作的一个小测试示例:
#include<fstream>
using namespace std;
void of_write_blocks(string filename, string block_type[], int **block,
int grid[][3], string grade_type[], int grade[][3], int n_blocks, int m[])
{
ofstream file_out(filename.c_str(),ios::app);
file_out<<"\nblocks\n(\n";
for(int i=0;i<n_blocks;++i) {
file_out<<" "<<block_type[i]<<" ( ";
for(int j=0;j<m[i];++j)
file_out<<block[i][j]<<" ";
file_out<<") ( ";
file_out<<grid[i][0]<<' '<<grid[i][1]<<' '<<grid[i][2]<<" ) ";
file_out<<grade_type[i]<<" ( ";
file_out<<grade[i][0]<<' '<<grade[i][1]<<' '<<grade[i][2]<<" )\n";
}
file_out<<");\n";
}
//testing example:
int main()
{
int block[6][9];
for(int i=0; i<6;++i)
for(int j=0; i<9;++j)
block[i][j] = i*j;
int grid[6][3];
for(int i=0; i<6;++i)
for(int j=0; i<3;++j)
block[i][j] = i*j;
int grade[6][3];
for(int i=0; i<6;++i)
for(int j=0; i<3;++j)
block[i][j] = i*j;
string grade_type[6] = {"simpleGrading"};
string block_type[6] = {"hex"};
int m[6] = {8};
int n_blocks = 6;
of_write_blocks("name",block_type,block,grid,grade_type,grade,n_blocks,m);
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
你不能.多维数组是语法糖,并直接编译到对数组进行操作的代码中,该数组是单个内存块.维度不作为参数传递给函数,也不作为数组的一部分传递给函数,就像在Java或C#中完成的那样.
如果你需要函数中数组的维度,你需要只接受一个指向数组第一个元素和维度的指针,然后进行乘法和加法以获得正确的索引.
或者,使用类似a的东西std::vector<std::vector<block>>,它将尺寸作为对象的一部分传递,而不是内置数组.