2016-06-17 62 views
1

好了,这里是我的问题:如何用一个函数内的相同结构的值填充结构?

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 

所以上面是我所做的简化版本。我试图(在线标记THIS线在步骤3)设置candidate_mod为一个不同的结构(current_mod),我会使用一个循环,但一个,这似乎不雅,二,有时我设置它的结构也是current_mod)包含更少的值(比candidate_mod),因此我担心原始结构(candidate_mod)的剩余值将会保留。

我也应该提到,因为也许它是相关的,该函数是定义在一个单独的c文件链接在生成文件,所以也许共享全局有一个困难..但我认为传递指针作为参数应该解决这个?

此外,从我的研究看来,也许使用extern可能会有所帮助,但我无法弄清楚在多次尝试之后如何使用。

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

干杯。

+0

忽略大量细节并查看问题标题。只要将它们与'structB = structA'等同起来,只要你不只是等同于指针,在这种情况下它应该是'* structB = * structA' –

回答

3

只需将src的值压入dest,不要分配指针......但是您的真正需求并不那么明确。

*candidate_mod = *current_mod; 
+0

因此,如果我在指针的前面放一个*一个变量或结构),它会将它返回为变量或结构而不是它的地址? – Alex

+0

此外,这是否意味着它会改变我的主要结构的价值。事情是,我不只是想在本地而是在全球范围内改变结构的价值。你的建议会是这种情况吗?对不起,我正在尝试自学,偶尔会来一个收割机。 – Alex

+1

是'* p'表示'p'指向的对象的值。当您传递在main中创建的对象的地址时,函数将更改该地址处的对象的值。 –

1

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

*candidate_mod = *current_mod; 
+0

好的,如果我在一个指针(变量或结构的地址)前放一个*,它会将它返回到变量或结构而不是它的地址? – Alex

+0

另外,这是否意味着它会改变我主体结构的价值。事情是,我不只是想在本地而是在全球范围内改变结构的价值。你的建议会是这种情况吗?对不起,我正在尝试自学,偶尔会来一个收割机。 – Alex

+0

*表示您进入您指向的地址并使用该值。指针的名称就是您指向的元素的地址,并且当您在指针的名称之前放*时,您将使用实际位于指向该位置的内容。是的,当你像指针参数那样传递地址时,你可以改变主值,但是如果你不将它作为指针传递,你不会将任何值改变成主 –