这与this question有关。我有一个函数void doConfig(mappings, int& numOfMappings)
,我不知道如何声明映射。它是一个二维数组,其元素是字符。第一个维度在运行时确定,并将在函数的主体中计算。第二个维度始终是2.这是什么代码?我想像它是char** mappings
或类似的东西。另外在C++中,数组总是通过引用传递给对象?所以即使我打算在函数返回时使用该值,我也不需要使用&
?如何返回一个尺寸未知的二维数组?
编辑:基本上,我想回到这个char (*mapping)[2] = new char[numOfMappings][2];
按2to1mux的建议,我仍然无法得到它的工作。该数组似乎得到正确的值,但当doConfig()
函数返回时出现错误。
int main()
{
int numOfMappings = 0;
char **mappings;
doConfig(mappings, numOfMappings);
cout << "This is mappings" << mappings << endl;//this address is different than the one given in doConfig(), is that wrong?
cout << "this is numOfMappings: " << numOfMappings << endl;
cout << mappings[0][0] << "->" << mappings[0][1] << endl;//program crashes here
//code removed
return EXIT_SUCCESS;
}
void doConfig(char **mappings, int& numOfMappings)
{
//code removed, numOfMappings calculated
for(int j = 0; j < numOfMappings; j++)
{
getline(settingsFile, setting);
mappings[j] = new char[2];
mappings[j][0] = setting.at(0);
mappings[j][1] = setting.at(2);
}
for(int j = 0; j < numOfMappings; j++)
cout << mappings[j][0] << "->" << mappings[j][1] << endl;//everything is as expected so array created ok
cout << "This is mappings" << mappings << endl;//different address than the one give in main
}
好吧我现在正在工作,但主要来自周围。请人们解释一下如何知道何时使用*
和&
?
我在看到您的编辑之前提供了一个答案。根据你的编辑,我现在感到困惑。你是说你在为函数内部的2d数组分配内存吗?然后你想返回一个指向你已经分配的内存的指针(然后你的担心是你不会知道函数外部的二维数组的大小,因为它是在函数中分配的)? – 2to1mux 2013-05-14 04:55:28
@ 2to1mux是你刚刚说的是正确的 – Celeritas 2013-05-14 04:56:52
我编辑了我的答案,以适应你的澄清。它有帮助吗? – 2to1mux 2013-05-14 06:35:46