【发布时间】:2019-08-02 02:50:05
【问题描述】:
我正在尝试编译我的 C89 代码,其中包含指向其他各种数组中位置的指针数组。我不断收到ERROR (207) Aggregate or union objects may be initialized with constant expressions only,可能是因为我在初始化时如何定义它,但我真的没有更好的方法来做到这一点,除了一次定义一个索引,我宁愿避免。我已经尝试了所有我能想到的方法,有没有办法一次定义一行?
uint8_t * keyPtrs[] = {
towers,
towers,
*(towers + 1),
*(towers + 1),
*(towers + 2),
*(towers + 2),
allianceStack
};
【问题讨论】:
-
这在 C89 中是不允许的,您必须定义数组,然后使用赋值语句。事实上,任何版本的语言都不允许使用这个特定的初始化程序,因为
towers和*(towers + 1)不能都转换为uint8_t *。也许你的意思是*towers用于前两个条目 -
我认为你不需要塔上的星号,因为它是一个数组(如果不清楚,抱歉)
-
好吧
towers和*towers是不同的东西。如果是数组,那么一个是数组,另一个是数组的第一个元素 -
您可能会想到
towers和&towers具有相同的值,这是不同的事情,但即使那样它们也不能互换。 -
显示
towers、Help Center > Asking的定义会改进问题