C++ new申请二维数组能否使用非常量入参

发布于 2022-09-13 01:27:16 字数 921 浏览 32 评论 0

前提:需要一个二位数组,非常量输入作为数组下标。知道可以用Vector实现,但是因为最近工作原因都是用的C语言开发,C++一些特性忘记了。

请教下C++ 除了用For循环,与兼容C的malloc,是否可以用C++的new实现下面内容。

string s;
cin >> s;
int slength = s.length();

bool (*dp)[slength] = (bool(*)[slength])malloc(sizeof(bool) * slength * slength);

直接使用下面代码报错:

bool (*dp)[slength] = new bool[slength][slength];

报错信息:

.\main.cpp: In member function 'std::__cxx11::string Solution::longestPalindrome(std::__cxx11::string)':
.\main.cpp:174:56: error: array size in new-expression must be constant
         bool (*dp)[slength] = new bool[slength][slength];
                                                        ^
.\main.cpp:174:56: error: the value of 'slength' is not usable in a constant expression
.\main.cpp:167:13: note: 'int slength' is not const
         int slength = s.length();
             ^~~~~~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小ぇ时光︴ 2022-09-20 01:27:16

这个是不行的,这里第二维(下标)必须是确定的才行。

遮云壑 2022-09-20 01:27:16

给你一个例子,虽然比较麻烦,是能实现你想要的效果的。

void arrary2d(int slength)
{
    // 分配
    int** a = new int*[slength];
    for (int i = 0; i < slength; i++)
        a[i] = new int[slength];

    // 测试
    for (int i = 0; i < slength; i++)
    {
        for (int j = 0; j < slength; j++)
        {
            a[i][j] = i * slength + j;
            printf("%d, ", a[i][j]);
        }
        printf("\n");
    }

    // 释放
    for (int i = 0; i < slength; i++)
        delete[] a[i];
    delete[] a;
}

int main()
{
    arrary2d(3);

    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文