如何将struct中的成员作为double数组和struct中的成员地址作为数组进行访问?

时间:2014-08-08 02:59:45

标签: c arrays struct

了解结构的新手,特别是涉及访问结构成员的地址或值。

我不确定我在这里使用语言,但我有:

  1. struct a
  2. 的2x2矩阵
  3. struct x是一个大小为2的数组
  4. 大小为2的结构b包含答案
  5. 到目前为止,我有......

    &(*(b+i))->s = (*(*(a+i)+j)).s * (*(x+k)).s
    

    但是我收到编译错误

    error: lvalue required as left operand of assignment
    

    编辑:

    我的结构

    typedef struct num{
          int s;
    }num_t;
    

    我的功能参数

     void calc(int n, int m, num_t **a, num_t *x, num_t *b)
    

    此外,问题是否正确?

    EDIT2:格式

1 个答案:

答案 0 :(得分:1)

假设我正确理解了您的问题,问题与运算符优先级有关。如上所述,赋值的左操作数相当于:

&((*(b + i))->s)

换句话说,您尝试为变量的地址赋值,因为->(指向成员的指针)运算符的优先级高于&的地址。 )运营商。你想要的是

(&(*(b + i)))->s

但是,这是非常不必要的,因为->运算符扩展为*解引用运算符和.成员运算符,因此您得到

(*(&(*(b + i)))).s

外部*取消引用和&引用运算符,在这种情况下,有效地"取消"彼此出局。所以,您可以将其重写为

(*(b + i)).s

最后(并且此规则可以应用于其他两个指针表达式),这基本上是访问一个数组元素,因此将其写为

更清晰
b[i].s

所以,你的最终陈述应该是这样的

b[i].s = a[i][j].s * x[k].s;

这更清晰,更有效地表达了语句的意图,这在编程中一直很重要。