Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中引用结构成员的不同方式_C_Struct - Fatal编程技术网

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

在C中引用结构成员的不同方式,c,struct,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

我使用了三种不同的方法,我认为它们是等效的,将值从另一个函数分配给结构的成员。我得到的结果是
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;
    }
#包括
类型定义结构
{
INTA、b、c;
}
试验研究;
无效变更(测试项目*我的项目);
int main()
{
测试我的记忆;
更改(&my_str);
printf(“a:%d,b:%d,c:%d\n”,my_str.a,my_str.b,my_str.c);
返回0;
}
无效更改(测试数据*我的数据)
{
测试我的记忆;
my_str=*my_str_ad;
my_str.a=5;
(*my_str_ad).b=6;
my_str_ad->c=7;
}
这里发生的事情是,您正在将
my\u str\u ad
的目标变量复制到
my\u str
中。因此,您对
my_str
所做的更改不会影响主菜单中的
my_str
。这无法在C中修复,即只能使用其他两种方法

[仅限C++语言]
你能做的就是把第一行改成-

  test_str& my_str;
这里发生的事情是,您正在将
my\u str\u ad
的目标变量复制到
my\u str
中。因此,您对
my_str
所做的更改不会影响主菜单中的
my_str
。这无法在C中修复,即只能使用其他两种方法

[仅限C++语言]
你能做的就是把第一行改成-

  test_str& my_str;
main()中的\u str与change()中的\u str不同

当您跳转到change()时,语句test\u str my\u str;创建test_str的新实例。 因此,main中my_str的成员“a”将不会受到change()的影响

(*my_str_ad).b=6; my_str_ad->c=7;将起作用,因为您正在使用传递给change()的指针修改main()的测试。\

main()中的my\u str与change()中的my\u str不同

当您跳转到change()时,语句test\u str my\u str;创建test_str的新实例。 因此,main中my_str的成员“a”将不会受到change()的影响

(*my_str_ad).b=6;
my_str_ad->c=7;将工作,因为您正在使用传递给change()的指针修改main()的测试。

my\u str=*my\u str\u ad
是您的问题。它不是指针,因此不会更改a的值。my_str_ad是结构的地址,我想取消对地址的引用以获得结构,这样我就可以通过str.member方法进行访问。为什么这不正确?@DurgaDatta您想使用
test\u str&my\u str在您的
更改中
function@YuHao
my_str
应为
test_str
类型。请您进一步澄清。
my_str.a=5
不会更改main()中声明的
my_str
a
的值。
my_str=*my_stru ad
是您的问题。它不是指针,因此不会更改a的值。my_str_ad是结构的地址,我想取消对地址的引用以获得结构,这样我就可以通过str.member方法进行访问。为什么这不正确?@DurgaDatta您想使用
test\u str&my\u str在您的
更改中
function@YuHao
my_str
应为
test_str
类型。请进一步澄清。
my_str.a=5
不会更改main()中声明的
my_str
a
的值。问题的标题中都有“C”,并且也被标记为C。问题的标题中都有“C”,并且被标记为C,也一样。
my\u str=*my\u str\u ad
在函数“change”中做了什么?@DurgaDatta您在
main()
中声明的my\u str仅是main的本地str,而您在
change()
中声明的str仅是该函数的本地str。正如在其中一个答案中所解释的,
change()
中的更改不会反映在
main()
。现在我知道更改是本地的,但我仍然想知道我之前的评论中的效果语句是什么。在函数'change'中,
my_str=*my_str\u ad
做了什么?@DurgaDatta您在
main()
中声明的my_str仅对main是本地的,而您在
change()中声明的是本地的
local仅适用于该函数。正如在其中一个答案中已经解释的那样,
change()
中的更改不会反映在
main()
中。现在我知道更改是本地的,但我仍然想知道我之前的评论中的效果声明是什么。