好的,这就是我的问题:
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, ¤t_mod, &empty_mod );
// arguments passed as pointers
所以上面是我所做的简化版。我正在尝试(在第3步中标记为 THIS LINE )将candidate_mod设置为不同的结构(current_mod),我会使用一个循环而不是一个,这似乎不优雅,两个,有时我的结构设置它也是相等的(current_mod)包含更少的值(比candidate_mod),因此我担心原始结构(candidate_mod)的多余值将保留。
我还应该提一下,因为它可能是相关的,该函数是在makefile中链接的单独c文件中定义的,所以也许共享全局变量有困难..但我认为将指针传递为一个论点应该解决这个问题?
此外,从我的研究中可以看出,使用extern可能有所帮助,但经过多次尝试我无法弄清楚。
如果有人能解释这样做的最佳方法,我将非常感激!我知道如何在我的主代码中做到这一点,但结构必须在函数中这样分配。
干杯。
答案 0 :(得分:3)
只需将src的值推入dest,不要指定指针......但是你真正需要的还不是那么清楚。
*candidate_mod = *current_mod;
答案 1 :(得分:1)
您正在传递结构的地址。当你说candidate_mod = current_mod;
时
您将current_mod
的地址指定为candidate_mod
这是不正确的。你必须使用像这样的代码取消引用该结构
*candidate_mod = *current_mod;