c语言中,变量名代表存储地址,那么为什么scanf中对某个变量操作,要加&,而prinft是直接用变量名?
2个回答
展开全部
因为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的功能类似
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询