1

MyTypeのintとstringの値を出力するprintメソッドを作成したいと思います。ただし、doIt1でのみ機能します。印刷方法を変更するにはどうすればよいですか、誰か助けてもらえますか?

#include<stdio.h>
#include<string.h>
typedef struct {
    int i;
    char s[1024];
} MyType;

doIt1(MyType *mt, int ii, char *ss){
    mt->i=ii;
    strcpy(mt->s, ss);
}

doIt2(MyType mt, int ii, char *ss){
    mt.i=ii;
    strcpy(mt.s, ss);
}

void print(MyType mt){
     print("%d\n", mt.i);
     print("%s\n", mt.s);
}

int main(int argc, char ** argv){
    MyType mt1, mt2;
    doIt1(&mt1, 12, "Other Stuff");
    doIt2(mt2, 7, "Something");
    print(mt1); // print out mt1
    print(mt2); // print out mt2
}
4

1 に答える 1

0

では、doit2を渡します。つまり、コピーを作成します。mt

doit2関数内でmtは、のエイリアスではありません:終了mt2時に破棄される別の変数です。doit2

簡単に言えば、あなたが電話するとき

doIt2(mt2, 7, "Something");

あなたのコードはこのようなことをします(単純化):

{
    MyType mt2_tmp = mt2;
    /* execute doIt2 passing the copy, mt2_tmp, to the function */
    doIt2(mt2_tmp, 7, "Something");
    /* the function exits and the copy is thrown away */
}
于 2012-04-18T17:13:38.977 に答える