我在 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/