在C中引用结构成员的不同方式

时间:2013-06-28 05:00:35

标签: c struct

我使用了三种不同的方法,我认为这些方法是从另一个函数为结构成员赋值。我在以下结构中得到 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;
    }

2 个答案:

答案 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,所以会有效。