如何以双数组形式访问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
&(*(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否决票在编辑之前,没有提供足够的信息