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值不是应该不变的吗 展开
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值不是应该不变的吗 展开
3个回答
展开全部
sp(&k)是将&k的地址传了过去,子函数可与主函数共享了k的存储位置,子函数当然可改变k的值了,你又不是将k的值传递过去;
在子函数中,又声明了一个a的指针变量,它先与主函数的k建立联系,于是每一个printf为3*2=6; 下面下去后,这个指针变量指向的位置又变成了b的地址,于是第二个打印的是2*2=4;
由于上一次改变了k的存储位置的值,将它变成了6,当结束子函数后,当然这个k就是6了
在子函数中,又声明了一个a的指针变量,它先与主函数的k建立联系,于是每一个printf为3*2=6; 下面下去后,这个指针变量指向的位置又变成了b的地址,于是第二个打印的是2*2=4;
由于上一次改变了k的存储位置的值,将它变成了6,当结束子函数后,当然这个k就是6了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
void 是没有返回值的
追问
是没有返回值啦 但是为什么K的值不是3啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询