返回指向多维数组的指针
Returning a Pointer to a Multidimensional Array
我想使用以下函数返回一个转置的指向多维数组的指针。
代码
float** Matrix3f::Transpose( void )
{
float matrix[MATRIX3_DIMS][MATRIX3_DIMS] =
{
{ mMatrix[ 0 ][ 0 ], mMatrix[ 1 ][ 0 ], mMatrix[ 2 ][ 0 ] },
{ mMatrix[ 0 ][ 1 ], mMatrix[ 1 ][ 1 ], mMatrix[ 2 ][ 1 ] },
{ mMatrix[ 0 ][ 2 ], mMatrix[ 1 ][ 2 ], mMatrix[ 2 ][ 2 ] }
};
float** ret = new float*[ MATRIX3_DIMS ];
for ( int i = 0; i < MATRIX3_DIMS; i++ )
{
for ( int j = 0; j < MATRIX3_DIMS; j++ )
{
( *ret )[ i ][ j ] = matrix[ i ][ j ];
}
}
return ret;
}
描述
如图所示,我使用初始化语法声明了一个多维数组(使用类成员matrix-mMatrix-来创建矩阵本身的转置版本。然后,我将一个多维指针分配给一个数组(ret)并循环通过,将本地数组的每个成员matrix分配给ret指针数组。
我收到的错误如下:
error: invalid types ‘float[int]’ for array subscript
问题
我到底做错了什么?我该如何完成这项任务?
ret是指向浮点指针的指针。当你取消引用它时,就像这样:(*ret)
,你会得到一个浮动的指针。当你对它取一个索引时,比如( *ret )[ i ]
,它会给你一个浮点值。当你对它取一个索引时,就像这样:( *ret )[ i ][ j ]
,好吧,你试图从一个float中取索引。这是不合法的。
抛开我对这种编码风格的厌恶不谈,你做错的第一件事就是没有分配子数组。不过,编译器错误指的是我在第一段中说明的错误。只需删除ret的取消引用即可解决此问题。你最终得到的是:
for ( int i = 0; i < MATRIX3_DIMS; i++ )
{
ret[i] = new float[MATRIX3_DIMS];
for ( int j = 0; j < MATRIX3_DIMS; j++ )
{
ret[ i ][ j ] = matrix[ i ][ j ];
}
}
不过,这完全不是异常安全的,您应该使用一个以异常安全的方式正确管理内存的类,如std::vector
。
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”