C语言问题 #include <stdio.h> typedef struct {int b,p;} A; void f(A c)详见问题补充里的

#include<stdio.h>typedefstruct{intb,p;}A;voidf(Ac){intj;c.b+=1;c.p+=2;}main(){inti;Aa... #include <stdio.h>
typedef struct {int b,p;} A;
void f(A 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);
}
展开
 我来答
WJX9103
推荐于2018-03-13 · 超过16用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:37.7万
展开全部
这是实参和形参结合的问题。主函数的变量a仅仅把自己的拷贝传给函数f(),函数f()仅仅操作了a的复制品,并不能改变原来主函数内a的值。你可以这样:
void f(A* c)
{int j;
c->b +=1; c->p+=2;
}
或者
void f(A *c)
{int j;
(*c).b +=1;(* c).p+=2; // .的优先级大于*,所有()不能省。
}

在主函数调用:
f(&a);

这样主函数把a的地址传递给f(),f()对c指向的地址进行操作,也就是改动了a。
aoqingxin
2013-08-16 · 超过23用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:65.6万
展开全部
你这样做是传值,即使函数f执行了,对你定义的结构体变量也没有任何影响,你应该将结构体的地址传给函数,例如:
void f(A *c){
*c.b +=1;
*c.p +=2;
}

main(){
A a={1,2};
f(&a);
printf(……);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳顶天鹿鼎记
2013-08-16 · TA获得超过502个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:405万
展开全部
如果你是想让结构a中的元素b+1,p+2
则你可以将子函数中的参数类型设置为引用,或指针
即void f(A &c) 或 void f(A* c)
传的时候,引用,直接传, 指针取地址传
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式