我是 C++ 的新手,我在了解所有这些指针方面遇到了一些问题。基本上我传递一个指向函数的指针,在该指针处创建一个数组。回到主函数,我无法访问这个数组。
这是我的代码:
#include <iostream>
using namespace std;
void createArray(char** dict, int* arraysize)
{
*arraysize = 26*26*26*26;
delete dict;
dict = 0;
//Initialisiere character array of character
//char **wortliste = 0;
dict = new char*[*arraysize];
for(int i = 0; i < *arraysize; i++)
dict[i] = new char[5];
int ctr = 0;
//Erstelle Einträge (sortiert)
for (char i = 'A'; i <= 'Z'; i++)
{
for (char j = 'A'; j <= 'Z'; j++)
{
for (char k = 'A'; k <= 'Z'; k++)
{
for (char l = 'A'; l <= 'Z'; l++)
{
dict[ctr][0] = i;
dict[ctr][1] = j;
dict[ctr][2] = k;
dict[ctr][3] = l;
dict[ctr][4] = '\0';
ctr++;
}
}
}
}
}
int main(void)
{
char** dict = 0;
int arraysize;
createArray(dict, &arraysize);
cout << dict[0] << endl << dict[arraysize-1] << endl;
return 0;
}
我无法弄清楚我的错误,非常感谢。
最佳答案
在 C++ 中,参数是按值传递的(除非明确标记为引用参数),因此当您传递 dict
时, 一个指向 char
的指针(指向 createArray
的指针) , dict
在你的函数中是一个不同的对象,尽管具有相同的初始值,作为 dict
在 main
.如果您想查看对 dict
的更改在 main
你必须通过引用传递它,或者将它的地址传递给一个接受 char ***
的函数。 .
例如
void createArray(char**& dict, int* arraysize)
或
void createArray(char*** pdict, int* arraysize)
{ // use (*pdict) instead of dict ...
和
// ...
createArray(&dict, &arraysize);
一种更“C++”的方式来实现你想要的是:
void createArray( std::vector<std::string>& dict );
并简单地拥有createArray
调整 vector
的大小到需要的尺寸。使用标准容器,如 vector
和 string
还可以免除您明确取消分配您分配的代码中当前缺少的内存的义务。
关于C++ 简单指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531320/