我使用了三种不同的方法,我认为这些方法是从另一个函数为结构成员赋值。我在以下结构中得到 b
和 c
的结果正确但不是 a
。这些改变结构成员值的方法是不是等价?
#include<stdio.h>
typedef struct
{
int a,b,c;
}
test_str;
void change(test_str * my_str_ad);
int main()
{
test_str my_str;
change(&my_str);
printf("a: %d, b:%d, c: %d\n", my_str.a, my_str.b, my_str.c);
return 0;
}
void change(test_str * my_str_ad)
{
test_str my_str;
my_str = *my_str_ad;
my_str.a = 5;
(*my_str_ad).b = 6;
my_str_ad->c = 7;
}
答案 0 :(得分:2)
test_str my_str;
my_str = *my_str_ad;
my_str.a = 5;
这里发生的是您正在将my_str_ad
的目标变量复制到my_str
。因此,您对my_str
所做的更改不会影响主要内容中的my_str
。这不能在C中修复,即只能使用其他两种方法。
仅限C ++]
你能做到这一点的方法是改变第一行,正如我所提到的那样, -
test_str& my_str;
答案 1 :(得分:2)
main()中的my_str与change()中的my_str不同。
当你跳转到change()语句test_str my_str;创建test_str的新实例。 所以main中my_str的成员'a'不会受到change()的影响。
(* my_str_ad).b = 6; my_str_ad-&gt; c = 7;因为你使用传递给change()的指针修改main()的test_str,所以会有效。