转换回二维数组
Casting Back to a 2-Dimensional Array
给定:
void foo(int[][3]);
int* bar();
以及bar
通过从二维数组(子数组大小为 3(reinterpret_cast
返回int*
的信息。
我想将这些映射在一起。我知道我可以做到:foo(reinterpret_cast<int (*) [3]>(bar()))
但我不太确定(*)
是什么意思.为什么我不能只做其中之一?
foo(reinterpret_cast<int* [3]>(bar()))
foo(reinterpret_cast<int[][3]>(bar()))
有人可以解释一下这种神秘的语法是什么意思以及为什么我不能使用1或2代替吗?
foo(reinterpret_cast<int* [3]>(bar()))
与
foo(reinterpret_cast<int (*) [3]>(bar()))
前者是将bar
投射到一个由 3 个"int
指针"组成的数组中。
后者bar
转换为指向"3int
s"数组的指针。这是非常不同的。
至于为什么你不能在reinterpret_cast
中使用int[][3]
作为类型,我不确定为什么会这样。语言律师将能够回答这个问题。
解析 C 声明有左右规则:
"左右"规则是破译 C 的完全常规规则 声明。 它在创建它们时也很有用。
首先,符号。 读
* as "pointer to" - always on the left side & as "reference to" - always on the left side [] as "array of" - always on the right side () as "function returning" - always on the right side
正如您在声明中遇到它们时。
步骤 1
查找标识符。 这是你的起点。 然后对自己说, "是。" 您已经开始声明。
步骤 2
查看标识符右侧的符号。 例如,如果您找到"((" 在那里,您就知道这是一个函数的声明。 所以你 然后会有"标识符是函数返回"。 或者,如果您发现 "[]"在那里,你会说"标识符是数组"。 继续向右,直到 您用完了符号或点击右括号"("。 (如果您点击 左括号,这是 (( 符号的开头,即使有 是括号中的东西。 更多内容见下文。
步骤 3
查看标识符左侧的符号。 如果它不是我们的 上面的符号(比如"int"之类的东西(,就说出来。 否则,请翻译 它使用上面的表格翻译成英语。 继续向左走,直到用完 符号或点击左括号"("。
现在重复步骤 2 和 3,直到形成声明。
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 转换回二维数组
- 将一维数组转换为二维数组
- 将一维数组的索引转换为二维数组
- 用C++将三维数组转换为二维数组
- 如何将二维数组转换为指针中的指针
- 将一维数组转换为二维数组
- 如何使用malloc从一维数组转换为二维数组
- 用C++将列表转换为对象的二维数组
- 如何在 OpenCV 中从二维数组转换为灰度图像
- 将表示二维数组的 std::vector<std::vector <double> >转换为 cv::Mat
- 在 C++ 中将一维数组转换为二维数组
- 将字符串转换为二维数组
- 在 Mac 中将一维数组转换为二维不起作用
- 如何在不分配内存的情况下将一维数组转换为二维数组
- OpenCV Mat到alglib的真实二维数组转换
- 在matlab中未正确设置二维数组到C++的转换
- 二维数组到指针到指针的转换
- 将ctypes int**转换为numpy二维数组