0

我使用了三种不同的方式,我认为它们是等效的,将值分配给来自另一个函数的结构的成员。我在以下结构中得到了正确的结果,bc不是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;
    }
4

2 回答 2

2
    test_str my_str;
    my_str = *my_str_ad;
    my_str.a = 5;

这里发生的事情是您将 COPYINGmy_str_ad的目标变量复制到my_str. 因此,您所做的更改my_str不会影响my_str您的主要内容。这不能在 C 中修复。即只能使用您的其他两种方法。

[仅限 C++]
你可以做的就是改变第一行,正如我所提到的,

  test_str& my_str;
于 2013-06-28T05:09:55.367 回答
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->c = 7; 将起作用,因为您正在使用传递给 change() 的指针修改 main() 的 test_str。

于 2013-06-28T05:31:59.790 回答