C语言 题 求详解

#include<stdio.h>voidsp(int*a){intb=2;*a=*a*2;printf("%d,",*a);a=&b;*a=*a*2;printf("%... #include <stdio.h>
void sp(int *a)
{ int b=2;
*a = *a * 2; printf("%d,", *a);
a=&b; *a = *a * 2; printf("%d,", *a);
}
main()
{ int k=3;
sp(&k); printf("%d\n", k);
}
输出是什么
6,4,6
K的值 为什么是6啊 函数调用不是值传递吗?K值不是应该不变的吗
展开
 我来答
松甜恬0Je4ba
2014-03-20 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3356万
展开全部
函数是值传递,但是你这里传递的是k的地址啊是&k,不是k啊!

int *a;
a=&k;

那么 *a表示的就是k所存储的值,所以*a的修改,就反应到k上面了。
追问
那a的值一次是6 一次是4  是K的值 改变的是哪个语句
追答
是6的那次,因为4的那次,a指针已经改变指向的内容了 a=&b,所以4的那次,改变的是b的值,而不是k的值。
奋力冲
2014-03-20 · TA获得超过102个赞
知道答主
回答量:97
采纳率:100%
帮助的人:43.3万
展开全部
sp(&k)是将&k的地址传了过去,子函数可与主函数共享了k的存储位置,子函数当然可改变k的值了,你又不是将k的值传递过去;
在子函数中,又声明了一个a的指针变量,它先与主函数的k建立联系,于是每一个printf为3*2=6; 下面下去后,这个指针变量指向的位置又变成了b的地址,于是第二个打印的是2*2=4;
由于上一次改变了k的存储位置的值,将它变成了6,当结束子函数后,当然这个k就是6了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2014-03-20 · TA获得超过119个赞
知道小有建树答主
回答量:378
采纳率:100%
帮助的人:192万
展开全部
void 是没有返回值的
追问
是没有返回值啦  但是为什么K的值不是3啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式