2016-10-12 3 views
0
struct info 
{ 
    int val; 
}; 

void copy(struct info ** dst, struct info * src) 
{ 
    *dst = (struct info *)malloc(sizeof(struct info)); 
    **dst = *src; 
} 

int main() 
{ 
    struct info *a, *b; 

    a = (struct info *)malloc(sizeof(struct info)); 
    a -> val = 7; 
    copy(,); 

    a -> val = 9; 
    printf("%d", b->val); 
} 

私は試してみました(b, a),(*b, *a)(b, *a)ですが、引数は常にコンパイラによって予期しないものです。結果が出ていない1時間を試してみました - ただ半分の脳が溶けました。aをbにコピーするにはどのようなパラメータをこの関数 'copy'に入れますか?

+1

どこでも '*'を入力しても問題は解決しません。 – tkausl

+0

'copy'に渡す際に' * 'の代わりに'& 'を使う必要があります。 –

答えて

2

最初の引数はポインタへのポインタであると考えられます。 bはポインタなので、アドレスは&bです。

第2引数はポインタであると考えられます。 aはポインタなので、直接渡すだけです。

copy(&b, a); 

*それが指すものをアクセスするためのポインタを通じてindirectingためです。これはあなたが望むものとまったく逆です。変数自体へのポインタを取得することです。 copy関数内で*を使用して、指定されたポインタにアクセスします。

ところで、あなたはまた、Do I cast the result of malloc?

が表示されるはずですそして、あなたがそれらを使用して行われているときの構造を解放することを忘れないでください。

関連する問題