c++ - 为什么 char** 不能作为 C++ 中以下函数的返回类型?

标签 c++ c function char return-type

我在 C++ 中有以下函数:

char** f()
{
    char (*v)[10] = new char[5][10];
    return v;
}

Visual Studio 2008 说明如下:

error C2440: 'return' : cannot convert from 'char (*)[10]' to 'char **'

为了让这个函数起作用,返回类型到底应该是什么?

最佳答案

char**char (*)[10] 不是同一类型。这两种类型都是不兼容的类型,因此 char (*)[10] 不能隐式转换为 char**。因此编译错误。

函数的返回类型看起来很难看。你必须把它写成:

char (*f())[10]
{
    char (*v)[10] = new char[5][10];
    return v;
}

现在它compiles .

或者您可以使用 typedef 作为:

typedef char carr[10];

carr* f()
{
    char (*v)[10] = new char[5][10];
    return v;
}

Ideone .


基本上,char (*v)[10] 定义了一个指向大小为 10 的 char 数组的指针。它与以下内容相同:

 typedef char carr[10]; //carr is a char array of size 10

 carr *v; //v is a pointer to array of size 10

所以你的代码等同于:

carr* f()
{
    carr *v = new carr[5];
    return v;
}

cdecl.org在这里帮助:

  • char v[10] 读作 declare v as array 10 of char
  • char (*v)[10] 读作 声明 v 为指向 char 数组 10 的指针

关于c++ - 为什么 char** 不能作为 C++ 中以下函数的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7138720/

相关文章:

c++ - 关于使用这个指针的问题

c++ - 如何将这些连接在一起?

c++ - 在 C++ 循环中添加定时器

javascript - 函数在 JS 华氏温度到摄氏度转换器中不起作用

C++ 错误 : invalid use of member 'calls_object::OBJECT' in static member function

c++ - 静态分配内存释放

c - realloc 指针指向随机内存,导致程序崩溃

c++ - char 的实习工作 - 更好/等于查找

C - 自己的 str_join 函数不起作用

c++ - 是否有像 lower_bound 这样的函数返回最后一个值而不是第一个值?