为什么C++ scanf函数需要引用变量作为参数?我想知道为什么scanf不能直接引用变量本身,因为每当我没有输入一个引用变量时,它就会给我一个奇怪的警告。它认为我输入的是一个指针。为什么会这样?谢谢。
我不明白他们怎么能修改变量的值。
下面是一个例子
#include <stdio.h>
void changeNumber(int *n) {
*n = 12;
}
int main() {
int x = 5;
printf("X: %i\n", x);
changeNumber(&x);
printf("X: %i", x);
return 0;
}
产量
X: 5
X: 12
IIRC,scanf()函数来自C语言,要求其参数是指针,因为原来的C语言根本没有参数的逐个传递引用。
编写函数的程序员不得不使用指针(传递了一个内存地址值)来实现pass-by-reference所能提供的结果。
我是用Pascal学编程的,这一点(加上缺乏数组边界检查)是我刚学C的时候最讨厌的事情之一。
我相信C++有按引用传递的功能,但scanf函数是来自C语言的stdio,所以它们是按值传递参数的。
想想看,两个 scanf
下面的函数。
#include <stdio.h>
void scanf_1(int a) {
a = 5;
}
void scanf_2(int *a) {
*a = 6;
}
int main()
{
int b = 1;
scanf_1(b);
printf("(1) b = %d\n", b);
scanf_2(&b);
printf("(2) b = %d\n", b);
return 0;
}
输出。
(1) b = 1
(2) b = 6
你可以看到,如果你用值传递,就可以看到以下的值 b
的值是不会改变的。但是当你使用指针然后通过引用传递时,指针的 b
是更新的。