【问题标题】:C pointer/array syntaxC 指针/数组语法
【发布时间】:2012-06-11 19:58:06
【问题描述】:

我知道下面两件事在c中是一样的(因为偏移量和数组)

someArray[i]     //ith element of someArray
*(someArray + i) //ith element of someArray

但是对于结构,相同的语法似乎并不能很好地支持...

someStruct[i]->*(someArray + j)   //compiler error
*(someStruct + i)->someArray[j]   //Also compiler error

到底有没有使用指针/偏移量表示法(第二种)来表示结构的元素?

【问题讨论】:

    标签: c arrays pointers syntax


    【解决方案1】:

    假设someStruct 是一个结构数组,someArray 是一个数组类型的结构成员,那么其中任何一个都有效:

    *(someStruct[i].someArray + j)
    

    (*(someStruct + i)).someArray[j]
    

    参见例如http://ideone.com/UtLN2.

    【讨论】:

      【解决方案2】:

      除其他外,您正在使用指针解析运算符->,而您可能应该使用成员引用运算符.

      假设 someStruct[] 是一个结构数组(不是指针):

      *(someStruct[i].someArray + j)
      (*(someStruct + i)).someArray[j]
      

      【讨论】:

        【解决方案3】:

        据我了解,我想您想通过一些指针/偏移量算法来表示结构的字段

        stddef.h 中有一个标准宏 offsetof(type, field),它会在结构或联合类型 type 内产生字段 field 的偏移量。

        例如,假设s 的类型为struct s*,而fstruct s 中的一个字段。那么*(s + offsetof(struct s, f))s->f一样。

        【讨论】:

          【解决方案4】:

          这应该可以工作

          *(someStruct[i]->someArray + j)

          (*(someStruct + i))->someArray[j]

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-12-16
            • 1970-01-01
            • 2018-09-18
            • 1970-01-01
            相关资源
            最近更新 更多