我想从stdin读取一个数字.我不明白为什么scanf要求在&我的变量名称之前使用:
int i;
scanf("%d", &i);
Run Code Online (Sandbox Code Playgroud)
为什么scanf需要变量的地址?
Thi*_*ter 18
它需要改变变量.由于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;
}
Run Code Online (Sandbox Code Playgroud)
C函数参数始终是 "按值传递",这意味着该函数scanf只能看到您指定的任何内容的当前值的副本作为参数表达式.
在这种情况下,&i是一个引用变量的指针值i.scanf可以用这个来修改i.如果你通过了i,那么它只会看到一个未初始化的值,(a)是UB,(b)不足以scanf知道如何修改i.
这不是必需的.
char s[1234];
scanf("%s", s);
Run Code Online (Sandbox Code Playgroud)
没有&任何一个地方工作得很好.什么scanf和公司需要是指针.要让它修改特定变量,请传递该变量的地址.对于默认情况下发生的几种类型.对于其他人,您使用&地址(获取指向该变量的指针).
| 归档时间: |
|
| 查看次数: |
7633 次 |
| 最近记录: |