求解整个C程序是如何执行的,望详细解答,谢谢
展开全部
整个程序难点主要是指针那个地方的赋值,具体执行是这样的。
1.
首先先执行printf("in
main,
before
f
and
g\n");输出in
main,
before
f
and
g,很简单。
2.
a
=
f(a,
b);函数执行也不用说最后return
为1+2+2的5,所以a=5;
3.
接下执行b
=
g(&b,
&c);函数,需注意g函数传入的是两个指针变量,&是取址符,讲b,c的地址传入g函数中。接下执行v
=
*p
+
*q;先前讲a,b地址传入了p,q指针。*是取值符,代表了取出p,q指针所指地址的数值。所以v
=5。接下来输出printf("in
g,
before
f\n");
4.
执行*q
=
f(v,
*p);。同理这句话表示将q所指地址的数值改变后面f函数返回值。f函数这里就相当于f(5,2),接下来输出printf("in
f\n");,所以最后return
的值为17,即q所指的地址(c)的值改变为17。
5.
输出printf("in
g,
after
f\n");
6.
最后返回值5-17=-12;即b=-12;最后输出printf("in
main,
after
f
and
g\n");
7.
printf("a
=
%d,
b
=
%d,
c
=
%d\n",
a,
b,
c);a=5,b=-12,c=17;
8.
结束!
有什么不懂得直接追问,望采纳!谢谢!
1.
首先先执行printf("in
main,
before
f
and
g\n");输出in
main,
before
f
and
g,很简单。
2.
a
=
f(a,
b);函数执行也不用说最后return
为1+2+2的5,所以a=5;
3.
接下执行b
=
g(&b,
&c);函数,需注意g函数传入的是两个指针变量,&是取址符,讲b,c的地址传入g函数中。接下执行v
=
*p
+
*q;先前讲a,b地址传入了p,q指针。*是取值符,代表了取出p,q指针所指地址的数值。所以v
=5。接下来输出printf("in
g,
before
f\n");
4.
执行*q
=
f(v,
*p);。同理这句话表示将q所指地址的数值改变后面f函数返回值。f函数这里就相当于f(5,2),接下来输出printf("in
f\n");,所以最后return
的值为17,即q所指的地址(c)的值改变为17。
5.
输出printf("in
g,
after
f\n");
6.
最后返回值5-17=-12;即b=-12;最后输出printf("in
main,
after
f
and
g\n");
7.
printf("a
=
%d,
b
=
%d,
c
=
%d\n",
a,
b,
c);a=5,b=-12,c=17;
8.
结束!
有什么不懂得直接追问,望采纳!谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询