【发布时间】:2018-08-24 14:34:10
【问题描述】:
所以我有一个这样声明的数组(这不是我的代码,我不会修改它):
static const struct {
int gsmesc;
int latin1;
int utf8_int;
char *utf8;
...
} gsm_escapes[] = {
{ 10, 12 , 0x0C, "\x0C" },
{ 20, '^', 0x5E, "\x5E" },
...
};
请注意,结构本身是未标记的。
我想用一个指针(而不是数组下标)迭代这个数组,我能想到的最好的就是这个,它编译时没有任何警告:
typeof(*gsm_escapes) *esc;
...
esc = gsm_escapes;
while (esc++->gsmesc != -1) {
esc = gsm_escapes;
while (esc->gsmesc != -1) {
是否有一种“正确”的方式来声明这种指针类型,因为这种方式似乎一反常态地不优雅?
这种类型的数据结构甚至被称为什么?我已经在谷歌上搜索了很长时间,但还没有找到任何涵盖它的引物。
【问题讨论】:
-
typeof似乎完全合法。 -
你可以改用
typeof(*gsm_escapes),我想……但是你为什么不能直接迭代gsm_escapes呢? -
我想用一个指针迭代这个数组 为什么?这实际上只是在做编译器很乐意为你做的显式指针数学。
-
我猜
typeof是合法的,当且仅当它做 OP 想要的,@EugeneSh .. 由于它是非标准的,这将取决于实现。 -
我看不出你在哪里说过。您只声明您不会修改代码。我不建议你这样做。
标签: c pointers struct initialization