C++ 回溯到二维数组
鉴于: 以及通过从二维数组(子数组大小为3)重新解释强制转换C++ 回溯到二维数组,c++,arrays,pointers,multidimensional-array,reinterpret-cast,C++,Arrays,Pointers,Multidimensional Array,Reinterpret Cast,鉴于: 以及通过从二维数组(子数组大小为3)重新解释强制转换返回int*的bar信息 我想把这些画在一起。我知道我能做到:foo(reinterpret\u cast(bar()),但我不太确定(*)是什么意思。为什么我不能做一个呢 foo(重新解释cast(bar()) foo(重新解释cast(bar()) 有人能解释一下这个神秘的语法是什么意思,以及为什么我不能用1或2来代替吗?解析C声明的方法有: “右-左”规则是破译C的完全规则规则 声明。它在创建它们时也很有用 首先是符号。阅读 vo
返回int*
的bar
信息
我想把这些画在一起。我知道我能做到:foo(reinterpret\u cast(bar())
,但我不太确定(*)
是什么意思。为什么我不能做一个呢
foo(重新解释cast(bar())
foo(重新解释cast(bar())
有人能解释一下这个神秘的语法是什么意思,以及为什么我不能用1或2来代替吗?解析C声明的方法有:
“右-左”规则是破译C的完全规则规则
声明。它在创建它们时也很有用
首先是符号。阅读
void foo(int[][3]);
int* bar();
当你在声明中遇到他们时
步骤1
查找标识符。这是你的出发点。然后对自己说,
“标识符为。”您已开始声明
步骤2
查看标识符右侧的符号。比如说,如果你发现“()”
这样,您就知道这是一个函数的声明。那么你呢
然后会有“标识符是函数返回的”。或者如果你找到一个
“[]”在这里,您会说“标识符是的数组”。一直走到
符号用完或右括号中出现“)”。(如果你撞到了一个
左括号是()符号的开头,即使有
括号中的内容。下面将详细介绍。)
步骤3
查看标识符左侧的符号。如果不是我们的
上面的符号(比如,类似“int”的东西),就说出来吧。否则,请翻译
用上表把它翻译成英语。一直向左走,直到你的车用完为止
符号或点击左括号“(”
现在重复第2步和第3步,直到形成声明
foo(重新解释cast(bar())
不一样
foo(reinterpret_cast<int* [3]>(bar()))
foo(重新解释cast(bar())
前者将条
转换为3个“int
指针的数组。”
后者将bar
转换为指向“3int
s”数组的指针,这是非常不同的
至于为什么你不能用int[][3]
作为reinterpret\u cast
中的一种类型,我不确定为什么会是这样。语言律师可以回答这个问题。如果你能在所讨论的:int(*)[3]
中演示这条规则的使用,对我来说会更有帮助。@JonathanMee inint(*p)[3]
p
是指向3个整数数组的指针。在强制转换中,您不需要标识符p
。
foo(reinterpret_cast<int* [3]>(bar()))
foo(reinterpret_cast<int (*) [3]>(bar()))