C++ 简单指针传递

标签 c++ pointers char

我是 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在你的函数中是一个不同的对象,尽管具有相同的初始值,作为 dictmain .如果您想查看对 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 的大小到需要的尺寸。使用标准容器,如 vectorstring还可以免除您明确取消分配您分配的代码中当前缺少的内存的义务。

关于C++ 简单指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531320/

相关文章:

c++ - codeeval 部分正确

c - 如何将 char 转换为十六进制和二进制

c - 如何将 char 数组作为参数传递给 C 中的函数?

c++ - 在 C++ 中包含文件?

c++ - 关于 Google 的 protobuf

c++ - eclipse 的自动生成的 .h 文件守卫

c++ - 链表中的唯一指针

objective-c - 将枚举与 NSNumber 进行比较

c - C 中奇怪的指针转换

regex - T SQL 模式或正则表达式,以确保为 varchar 列返回的所有行都严格是字母数字