gpt4 book ai didi

c - 指向c中匿名结构数组的指针

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:45 24 4
gpt4 key购买 nike

所以我有一个这样声明的数组(这不是我的代码,我不会修改它):

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 是唯一直接的方法,因为结构没有标签。它也是非标准的,因此并非所有编译器都支持它。

您的选择是:

  • 保持原样
  • 使用数组表示法代替指针表示法:

    int i=0;
    while (gsm_escapes[i++]->gsmesc != -1) {

    i=0;
    while (gsm_escapes[i]->gsmesc != -1) {
  • 使用 typeof 为结构创建一个 typedef。这样 typeof 表达式只出现一次:

    typedef typeof(*gsm_escapes) struct_gsm_escapes;
    ...
    struct_gsm_escapes *esc;

关于c - 指向c中匿名结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52006710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com