c - 如何访问 struct 中的成员作为 double 数组和 struct 中成员的地址作为数组?

标签 c arrays struct

<分区>

刚开始了解结构,尤其是涉及访问结构成员的地址或值。

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

  1. 结构a的2x2矩阵
  2. struct x 是一个大小为 2 的数组
  3. 大小为 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:格式

最佳答案

假设我正确理解你的问题,这个问题与运算符优先级有关。正如所写,赋值的左操作数等同于:

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

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

关于c - 如何访问 struct 中的成员作为 double 数组和 struct 中成员的地址作为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25195447/

相关文章:

c - 为什么我不能将可选的 Swift String 传递给允许 NULL 指针的 C 函数?

JAVA程序计算从0开始的前n个能被3整除的偶数的总和并打印总和

c - 在结构体中存储标记

c - act.offective.c : In function âdo_fireâ: act. Offshore.c:631:警告:内置函数“abort”的隐式声明不兼容

c - 在 Linux 内核 2.6.32 或更高版本中,每个 net_device 的私有(private)数据存储在哪里?

javascript - 如何使用 _lodash 从数组中的对象中检索值?

C++ 初始化使用 "new"关键字分配的结构的对象成员

c++ - 如何在 C++ 中创建 "wrapper"?

c - 将 C 代码与 CUDA 代码进行比较时使用哪个计时器?

javascript - 为什么我的数组未定义?