在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@YuHaomy_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@YuHaomy_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()
中。现在我知道更改是本地的,但我仍然想知道我之前的评论中的效果声明是什么。