为什么scanf的需要及?(Why does scanf require &?)

2019-06-24 11:18发布

我想从stdin读取的数字。 我不明白为什么scanf需要使用&我的变量名前:

int i;
scanf("%d", &i);

为什么scanf需要的变量的地址?

Answer 1:

它需要改变的变量。 由于C中的所有参数都按值传递需要,如果你想有一个功能能够改变一个参数传递一个指针。

下面是显示它超级简单的例子:

void nochange(int var) {
    // Here, var is a copy of the original number. &var != &value
    var = 1337;
}
void change(int *var) {
    // Here, var is a pointer to the original number. var == &value
    // Writing to `*var` modifies the variable the pointer points to
    *var = 1337;
}
int main() {
    int value = 42;
    nochange(value);
    change(&value);
    return 0;
}


Answer 2:

C函数的参数始终是“传递的价值”,这意味着该函数scanf只看到任何你指定的参数表达式当前值的副本。

在这种情况下&i是指变量的指针值iscanf可以用它来修改i 。 如果你通过i的话,那就只能看到一个未初始化的值,其中(a)为UB,(b)是不足够的资料, scanf知道如何修改i



Answer 3:

这是没有必要的。

char s[1234];

scanf("%s", s); 

工作没有一个单一的就好了&任何地方。 什么scanf和公司的需求是指针 。 为了让它修改特定的变量,你传递变量的地址。 对于在默认情况下发生的几类。 对于其他人,你用&取地址(获取一个指针变量)。



Answer 4:

因为否则它只会改变副本而不是原始。



Answer 5:

scanf的要求AddressOf运算符(&),因为它需要一个指针作为参数。 因此,为了传递一个变量被设置为一个价值传递你必须做出一个指针出来的变量,以便它可以改变的。

指针必须传递给scanf函数的原因是,如果你只是传递一个变量,你将不能够直接改变scanf函数中的变量,所以你想不出它设置为scanf函数读取值。

希望这可以帮助。



Answer 6:

scanf()值存储,因此它需要存储它们的地方。
这是通过在哪里存储使用的值提供所述地址(在指针)进行addressof或(符号)运算符。



Answer 7:

sscanf的不需要&

int decimal;
int *pointer = &decimal;
scanf("%d", pointer);

上面的代码是有效



文章来源: Why does scanf require &?
标签: c scanf