求大佬解析一下这题
#include <stdio.h>typedef struct {int b, p;}A;
void f(A c)//注意: C是结构变量名
{
int j;
c.b += 1; c.p += 2;
}
main()
{
int i;
A a ={1,2};
f(a);
printf("%d, %d\n", a.b, a.p);
} 你不理解的或许是形参实参,局部变量的问题
帮你对程序进行了注释,希望能帮到你
#include <stdio.h>
typedef struct {int b, p;}A;//声明了一个结构体类型A,A类型有两个int类型变量,分别是b和p
void f(A c)//注意: C是结构变量名
{//c为形参,是一个局部变量,函数调用结束,c会被立即销毁
int j;
c.b += 1; c.p += 2;//c.b自加1,c.p自加2
}
int main()
{
int i;
A a ={1,2};//定义了结构体变量a,a.b=1,a.p=2
f(a);//调用函数f,a作为实参传进函数。然而函数的运行没有对a产生任何影响
printf("%d, %d\n", a.b, a.p);//输出a.b和a.p
} 我一点都看不懂{:10_266:} 一开始可以看出typedef struct是定义了一个结构体,A是一个结构体的类名(这个可能说的不太准确),里边包含了两个变量,即b和p。
然后主函数中,定义了一个A类型的变量a,其中a.b=1,a.p=2;
然后执行f(a)跳转到函数中(此时,只是把形参传过去了,即令c=a,但是c不是a),修改了c.b和c.p,他们的值分别为2,4(这可你可以加一句printf("%d, %d\n", c.b, c.p);就知道了)
因为上一步传的是形参,真正的值没有返回到a中,所以输出的仍然是a原本的值:a.b=1,a.p=2; 脑海里 发表于 2020-8-13 18:04
我一点都看不懂
看不懂啥 Heyyyyyyy 发表于 2020-8-13 18:12
一开始可以看出typedef struct是定义了一个结构体,A是一个结构体的类名(这个可能说的不太准确),里边包 ...
那, 我不太清除, 为什么参数传到, f函数中, c会是a呢 sunrise085 发表于 2020-8-13 18:16
你不理解的或许是形参实参,局部变量的问题
帮你对程序进行了注释,希望能帮到你
主函数中f(a)为什么传给c呢, 而不给A 脑海里 发表于 2020-8-13 18:20
那, 我不太清除, 为什么参数传到, f函数中, c会是a呢
因为在函数f中c是自己占了一个内存空间的,而a作为一个独立的变量也是自己占了一个内存空间的,他们占着各自的内存空间,所以无法改变对方的值,如果你用指针,就可以改变他们的值,例如下边的代码:
#include <stdio.h>
typedef struct {int b, p;}A;
void f(A *c)//注意: C是结构变量名
{
int j;
c->b += 1; c->p += 2;
}
main()
{
int i;
A a ={1,2};
f(&a);
printf("%d, %d\n", a.b, a.p);
}
因为这时候c是一个指针,指向了a所占的内存空间,故修改的也是a的值 脑海里 发表于 2020-8-13 18:20
那, 我不太清除, 为什么参数传到, f函数中, c会是a呢
举个例子:超市做活动,发出一些传单,对外宣布,凡是持此宣传单的本超市会员可到店给自己的会员卡积分翻倍。
这里传单就相当于函数f;
超市会员相当于c。小明是超市会员,相当于a;
小明的会员积分为100,相当于a.b为1,a.p为2;
小明手持宣传单进入超市,相当于传参进函数。
但实际上你的这个函数是值传递方式,相当于小明进入超市兑换积分,仅仅是让小明拿着会员积分值去了超市,然后在纸上写积分翻倍,实际上小明的积分卡上积分没变。 脑海里 发表于 2020-8-13 18:20
那, 我不太清除, 为什么参数传到, f函数中, c会是a呢
我刚来等级好像还不够,还加不了好友,抱歉啦{:10_285:} 脑海里 发表于 2020-8-13 18:24
主函数中f(a)为什么传给c呢, 而不给A
A是个数据类型。类似于int、char、float等等,只是这个类型是你自己定义的
c才是该类型的变量 Heyyyyyyy 发表于 2020-8-13 18:35
我刚来等级好像还不够,还加不了好友,抱歉啦
没事. 想加你好友问问, 问题已解决, 谢谢啦 sunrise085 发表于 2020-8-13 18:34
举个例子:超市做活动,发出一些传单,对外宣布,凡是持此宣传单的本超市会员可到店给自己的会员卡积分翻 ...
OK ,谢谢, 懂了
页:
[1]