C++ 如何在C+中将表示2D数组的指针转换回2D数组+;?

C++ 如何在C+中将表示2D数组的指针转换回2D数组+;?,c++,arrays,types,casting,C++,Arrays,Types,Casting,类中有一个变量声明为编译时常量,大小已知: 静态常量int数组[5][5];//在其他位置初始化的常量 以及一个实际返回它的函数: virtual const int**getArray(){return array;} 如何使用此方法获取此数组,并将其转换为固定大小的数组,而不是基于指针,因此我可以像cout那样使用它,这是不可能的。当数组传递给函数或从函数返回时,将丢失所有大小信息。可以说,数组衰减为一个指针,这是不可能的。当数组传递给函数或从函数返回时,将丢失所有大小信息。可以说,数组衰减

类中有一个变量声明为编译时常量,大小已知:

静态常量int数组[5][5];//在其他位置初始化的常量

以及一个实际返回它的函数:

virtual const int**getArray(){return array;}


如何使用此方法获取此数组,并将其转换为固定大小的数组,而不是基于指针,因此我可以像
cout那样使用它,这是不可能的。当数组传递给函数或从函数返回时,将丢失所有大小信息。可以说,数组衰减为一个指针,这是不可能的。当数组传递给函数或从函数返回时,将丢失所有大小信息。可以说,数组衰减为指针使用:

#包括
静态常量std::array myarray;//常量在另一个地方初始化
虚拟常量std::array&getArray()常量
{ 
返回myarray;
}
如果不支持C++11,可以使用
std::tr1::array
boost::array
(或推出自己的固定大小数组类型)。

使用:

#包括
静态常量std::array myarray;//常量在另一个地方初始化
虚拟常量std::array&getArray()常量
{ 
返回myarray;
}
如果不支持C++11,可以使用
std::tr1::array
boost::array
(或推出自己的固定大小数组类型)

这不起作用,也不应该编译;您试图返回指向某些指针的指针,但没有指向的指针,只有数组数组

您可以返回指向这些数组的指针,保留类型:

virtual const int (*getArray())[5] { return array; }
const int (*data)[5] = getArray();
cout << data[2][2];
virtual const int(*getArray())[5]{return array;}
常量int(*data)[5]=getArray();
库特
这不起作用,也不应该编译;您试图返回指向某些指针的指针,但没有指向的指针,只有数组数组

您可以返回指向这些数组的指针,保留类型:

virtual const int (*getArray())[5] { return array; }
const int (*data)[5] = getArray();
cout << data[2][2];
virtual const int(*getArray())[5]{return array;}
常量int(*data)[5]=getArray();

很简单,你就快到了

const int(*)[5] data = reinterpret_cast<int(*)[5]>(object->getArray());
const int(*)[5]data=reinterpret_cast(object->getArray());

很简单,你就快到了

const int(*)[5] data = reinterpret_cast<int(*)[5]>(object->getArray());
const int(*)[5]data=reinterpret_cast(object->getArray());

正如我在上一个问题中所说,
const int**
与指向二维数组的指针不同。它不是那样工作的。你不能投。如果你想要,在代码< > const ARR*<代码>下,你可以把代码< > const ARR*/COD>(其中代码< > ARR < /CUT>是TyPulf。<代码> GETARDUCT//COD>函数没有任何意义,并且不是有效的C++。就像我在前一个问题中所说的,<代码> const int ** /COD>与一个二维数组的指针不一样。它不是那样工作的。你不能投。如果你想,你可以把<代码> const int */COD>转换成<代码> const ARR*/CUT>,如果代码< > ARR < /Cord>是TyPulf。<代码> GETARDUSE/COD>函数没有任何意义,而且是无效的C++。好,我丢失了它,但是记住我在编译时知道它。我能用这个信息来回退这个数组(像“力维度”)吗?好吧,我把它丢了,但是请记住,我在编译时就知道了-我可以使用这些信息来回溯这个数组(比如“forcedimensions”)?这是一个完整的编译时解决方案吗?如果我的原始阵列需要10MB内存,那么这个解决方案需要10MB还是20MB?(分配动态10MB并从10MB常量初始化它)。我们讨论动态DLL环境,假设所有编译时常量也在内存中@killer_PL它将具有与2D数组相同的大小。没有动态内存分配。它应该与静态2D数组示例相同。这是完整的编译时解决方案吗?如果我的原始阵列需要10MB内存,那么这个解决方案需要10MB还是20MB?(分配动态10MB并从10MB常量初始化它)。我们讨论动态DLL环境,假设所有编译时常量也在内存中@killer_PL它将具有与2D数组相同的大小。没有动态内存分配。它应该与静态2D数组示例相同。这不希望编译:
error:expected primary expression在'const'之前,error:expected';'在“const”
(使用G++编译)之前,错误在“const”
之前显示
,这似乎表明前一行有错误。这不希望编译:
错误:在“const”之前应包含主表达式,错误:应包含“;”在“const”
(使用G++编译)之前,错误是在“const”
之前显示
,这似乎表明前一行有错误。
virtual const int (*getArray())[5] { return array; }
const int (*data)[5] = getArray();
cout << data[2][2];
const int(*)[5] data = reinterpret_cast<int(*)[5]>(object->getArray());