将自定义类型的数组的地址分配给struct中相同类型的数组的相同地址,得到“错误:分配给具有数组类型的表达式”

时间:2019-04-17 22:26:24

标签: c

我试图使一个数组在结构内镜像另一个相同类型的数组,确保两个数组都指向相同的地址。

我最初尝试的内容:

duonrektoqf dr_qf;
dr_qf.loko = dr[0];

在阅读了一些有关此问题的信息后,我后来尝试了

duonrektoqf dr_qf;
dr_qf.loko = &(dr[0][0]);

两者都使用相同的error: assignment to expression with array type

Relevent数据类型:

typedef mpq_t vektoro[3];
typedef vektoro duonrektoqq[2];
typedef float vektorof[3];

typedef struct duonrektoqf {
  vektoro loko;
  vektorof vkt;
} duonrektoqf;

当前分配代码:

duonrektoqf dr_qf;
dr_qf.loko = &(dr[0][0]);
dr_qf.vkt[0] = (float) mpf_get_d(dr[1][0]);
dr_qf.vkt[1] = (float) mpf_get_d(dr[1][1]);
dr_qf.vkt[2] = (float) mpf_get_d(dr[1][2]);

duonrektoqq dr

是传递给函数的变量。

我希望dr_qf.loko指向与dr[0]dr[0][0]相同的位置。我希望当我将dr[0][0]更改为4/5时,dr_qf.loko[0]也将为4/5。我还期望dr_qf.loko不会占用比简单指针所需更多的内存,因为该数组已经存在,并且我将不必运行复杂的gmp分配函数来初始化的全新版本数组。这是光线追踪器,我已经在使用数字库,因此性能非常重要!

我还希望dr_qf.vkt数字是其mpq_t副本的浮点版本,这似乎不是问题。这仅与上下文相关。

dr_qf.loko实际发生的事情是我得到了错误error: assignment to expression with array type

strcmp,就像在类似线程中建议的那样,在这里将无法工作,因为这不是字符串,而且我不想复制整个内容...

编辑:尝试&(dr_qf.loko) = &(dr[0][0]);,得到error: lvalue required as left operand of assignment

编辑:我认为这可能是指向数组的指针真正有意义的少数情况之一。我要尝试brb!

编辑:将类型更改为指向数组的指针有效。谢谢!

编辑:更改标题以反映意图后,我不知道如何将其取消标记为重复项(也许我应该将其发布为新问题?这需要一段时间),所以我将将这个问题的答案放在这里:

将dr_qf.loko设置为数组意味着将数组实际存储在结构dr_qf中!我们不想要那个!相反,我们需要一个指向数组的指针!

因此,类型将如下更改:

typedef struct duonrektoqf {
  vektoro *loko;
  vektorof vkt;
} duonrektoqf;

然后,赋值函数更改为:

duonrektoqf dr_qf;
dr_qf.loko = &(dr[0]);
dr_qf.vkt[0] = (float) mpf_get_d(dr[1][0]);
dr_qf.vkt[1] = (float) mpf_get_d(dr[1][1]);
dr_qf.vkt[2] = (float) mpf_get_d(dr[1][2]);

每当我们要访问dr_qf.loko中的元素时,我们将使用指向该元素的指针,例如:

mpq_set_si(*(dr->loko)[0], -1, 1);

0 个答案:

没有答案