我想创建一个print方法来打印MyType中的int和string值。
但是它只对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 }
最佳答案
在doit2中,您正在按值传递mt,也就是说,您正在复制。
在doit2函数中,mt不是的别名:它是在mt2退出时将被丢弃的另一个变量。
简单地说,当你打电话
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 */ }
关于c - 可能无法在C中使用typedef构造的MyType中打印值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10214305/