为什么C++ scanf函数需要引用变量作为参数?

问题描述 投票:0回答:1

为什么C++ scanf函数需要引用变量作为参数?我想知道为什么scanf不能直接引用变量本身,因为每当我没有输入一个引用变量时,它就会给我一个奇怪的警告。它认为我输入的是一个指针。为什么会这样?谢谢。

c++ c pointers reference scanf
1个回答
3
投票

我不明白他们怎么能修改变量的值。

下面是一个例子

#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

2
投票

IIRC,scanf()函数来自C语言,要求其参数是指针,因为原来的C语言根本没有参数的逐个传递引用。

编写函数的程序员不得不使用指针(传递了一个内存地址值)来实现pass-by-reference所能提供的结果。

我是用Pascal学编程的,这一点(加上缺乏数组边界检查)是我刚学C的时候最讨厌的事情之一。

我相信C++有按引用传递的功能,但scanf函数是来自C语言的stdio,所以它们是按值传递参数的。


0
投票

想想看,两个 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 是更新的。

© www.soinside.com 2019 - 2024. All rights reserved.