c语言中,变量名代表存储地址,那么为什么scanf中对某个变量操作,要加&,而prinft是直接用变量名?

 我来答
一颗程序猿o_0
2019-03-21 · TA获得超过6298个赞
知道大有可为答主
回答量:5403
采纳率:77%
帮助的人:1378万
展开全部
因为scanf的参数是指针类型 它要把输入的值放到你提供的变量里, 所以必须使用引用参数传递
追问
为什么必须要引用参数?可以说的详细点吗?
追答

你先要分清楚"按值传递" 和 "按址(或引用)传递" 的区别

比如你有一个局部int 变量,  如果想要让另一个函数以参数传递的方式给他赋值的话, 就必须用按址传递的方式:

int main()
{
   int a = 1, b=1;
   fun1(a);  /*不能给a赋值*/
   fun2(&b); /*可以给b赋值*/ 
   ...
}

void fun1(int val)
{
   val = 100;
}

void fun2(int* val)
{
   *val = 100;
}

上面的代码片段里, 调用fun1和fun2之后, a的值还是1, 而b的值就变成100了

scanf跟fun2的功能类似

syht2000
高粉答主

2019-03-21 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
这个不用太深究,就是这样规定的,其实scanf内部也完全可以这样处理
int a,b;
b=&a;
scanf("%d",b);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式