什么是c ++中的int(*)[someValue]?

时间:2018-01-20 18:21:15

标签: c++ dev-c++

我只是在大学里学习c ++。 我试图从GitHub编译代码来解决Rubiks立方体。我在以下代码行中收到错误:

  Table = int (*)[Cube::Move::NumberOfClockwiseQuarterTurnMoves] // the cast

错误消息是:

MoveTable.cpp   [Error] expected primary-expression before 'int'

我使用dev-c ++ IDE进行编译,我不熟悉int(*)[]。 请有人告诉我它是什么,我该如何纠正?

我做了一些研究,发现this。和我的问题一样吗?看起来有点不同。我并不是要求int *(int*)=constant提问here.

编辑:我忘了在

之前加上完整的陈述
Table = (int (*)[Cube::NumberOfClockwiseQuarterTurnMoves] )// the cast
    (new int[TableSize*Cube::NumberOfClockwiseQuarterTurnMoves]);

我收到了这些错误。

    [Error] expected primary-expression before 'int'
    [Error] expected ')' before 'int'

1 个答案:

答案 0 :(得分:1)

简而言之

问题标题的答案是:int(*)[someConstant]对应于指向someConstant项目表的指针的类型,每个项目都为int类型。

所有细节

在C ++中,有效语句以半列结尾,因此语句中缺少一部分。此外,评论显示这只是演员的一部分。

在GitHub上的原始project file中,完整的陈述是:

Table = (int (*)[Cube::Move::NumberOfClockwiseQuarterTurnMoves]) // the cast
        (new int[TableSize*Cube::Move::NumberOfClockwiseQuarterTurnMoves]); // the allocation

此强制转换表示将由表达式返回的指针作为指向NumberOfClockwiseQuarterTurnMoves整数表的指针进行处理,即使实际上{{1}返回了指向较大表的指针。 1}}表达。

new之前删除括号之前,因为int是一个无效的语句,因为int (*)[Cube::Move::NumberOfClockwiseQuarterTurnMoves]是一种类型,并且它不允许使用这样的类型没有正确的转换运算符的表达式。因此,编译器会告诉您它需要一个真实的表达式(它将提供一个实际值)。

PS :这实际上与int (*)()相关的问题没有关系,这些问题引用函数返回一个int的函数指针