如何在函数中填充具有相同结构值的结构?

时间:2016-06-17 20:32:15

标签: c pointers data-structures extern

好的,这就是我的问题:

1)我有一个结构定义如下:

struct minos_model
{
  int ifanis, ifdeck, npts, icb, cmb, noc;
  double tref;
  double r[MODEL_NPTS_MAX], rho[MODEL_NPTS_MAX], vpv[MODEL_NPTS_MAX],     vsv[MODEL_NPTS_MAX],
  qk[MODEL_NPTS_MAX], qmu[MODEL_NPTS_MAX], vph[MODEL_NPTS_MAX],     vsh[MODEL_NPTS_MAX], eta[MODEL_NPTS_MAX];
  char model_name[MODEL_LINE_LEN];
};
typedef struct minos_model model_t;

2)我已经宣布了这种形式的一些结构:

/* Declare structures */
model_t candidate_mod, current_mod, empty_mod;

3)然后我将它们传递给声明为这样的函数:

void
perturb_model( model_t *candidate_mod, model_t *current_mod, model_t *empty_mod )
{
    candidate_mod = current_mod; // *THIS LINE*
    <various other functions and whatnot>
}

4)然后我调用这个函数:

perturb_model( &candidate_mod, &current_mod, &empty_mod );
// arguments passed as pointers

所以上面是我所做的简化版。我正在尝试(在第3步中标记为 THIS LINE )将candidate_mod设置为不同的结构(current_mod),我会使用一个循环而不是一个,这似乎不优雅,两个,有时我的结构设置它也是相等的(current_mod)包含更少的值(比candidate_mod),因此我担心原始结构(candidate_mod)的多余值将保留。

我还应该提一下,因为它可能是相关的,该函数是在makefile中链接的单独c文件中定义的,所以也许共享全局变量有困难..但我认为将指针传递为一个论点应该解决这个问题?

此外,从我的研究中可以看出,使用extern可能有所帮助,但经过多次尝试我无法弄清楚。

如果有人能解释这样做的最佳方法,我将非常感激!我知道如何在我的主代码中做到这一点,但结构必须在函数中这样分配。

干杯。

2 个答案:

答案 0 :(得分:3)

只需将src的值推入dest,不要指定指针......但是你真正需要的还不是那么清楚。

*candidate_mod = *current_mod;

答案 1 :(得分:1)

您正在传递结构的地址。当你说candidate_mod = current_mod;时 您将current_mod的地址指定为candidate_mod这是不正确的。你必须使用像这样的代码取消引用该结构

*candidate_mod = *current_mod;