Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以双数组形式访问struct中的成员以及以数组形式访问struct中成员的地址?_C_Arrays_Struct - Fatal编程技术网

如何以双数组形式访问struct中的成员以及以数组形式访问struct中成员的地址?

如何以双数组形式访问struct中的成员以及以数组形式访问struct中成员的地址?,c,arrays,struct,C,Arrays,Struct,对理解结构不熟悉,尤其是在访问结构成员的地址或值时 我不确定我在这里使用的语言,但我有: 结构a的2x2矩阵 结构x是一个大小为2的数组 大小为2的结构b包含答案 到目前为止我已经 &(*(b+i))->s = (*(*(a+i)+j)).s * (*(x+k)).s 但是,我收到了编译器错误 error: lvalue required as left operand of assignment 编辑: 我的结构 typedef struct num{ int s

对理解结构不熟悉,尤其是在访问结构成员的地址或值时

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

  • 结构a的2x2矩阵
  • 结构x是一个大小为2的数组
  • 大小为2的结构b包含答案
  • 到目前为止我已经

    &(*(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:Format

    假设我正确理解了您的问题,那么这个问题与运算符优先级有关。写入时,赋值的左操作数等效于:

    &((*(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;
    

    这更简洁,更有效地传达了语句的意图,这在编程中始终很重要。

    需要更多信息。如何定义
    a
    b
    ?你的
    struct
    s数组是如何定义的?这完全是错误的。一个人永远不应该写这样的表达。我怀疑你想要的是
    b[I].s=a[I][j].s*x[k].s
    。为什么要投否决票?对于SO中的第一个问题,这并不坏。这显示了在发布问题之前的一些努力。否决这些问题会吸引新的人away@arunmoezhi否决票在编辑之前,没有提供足够的信息