c - 为什么在 C 输入中需要变量的内存位置而不是变量本身的名称?

标签 c variables memory location scanf

C (scanf) 在获取输入时更喜欢获取变量的内存位置而不是变量本身的名称有什么特别的原因吗? 我知道上面规定的 scanf 的定义是什么? 但是有什么特别的原因吗? 就像在 C++ 中一样,如果你想接受输入,你会写 cin>>var; 但为什么不在? 是为了让语言变得更快吗?

最佳答案

这是因为 C 中函数的值是按值传递的。当然,作为一种编译语言,变量名称在运行时并不存在,此时它都是内存中的地址。

如果直接传递变量,传递的只是值,这是printf()需要的:

int a = 32;
printf("a=%d\n", a);

但是如果你对 scanf()' 做同样的事情,它只会得到整数值32,而不知道它是从哪里来的。由于 scanf()` 的目的是更改调用方变量的值,因此您传递变量的地址:

int a = 32;
scanf("%d", &a);

然后 scanf() 中的代码可以在给定地址处写入一个新的整数值,这会导致 a 中的值发生变化。

关于c - 为什么在 C 输入中需要变量的内存位置而不是变量本身的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17250727/

相关文章:

c - 多词搜索

Arch Arm 的交叉编译不会生成功能可执行文件

variables - 如何在 terraform 中为 s3 后端声明变量?

c++ - munmap_chunk() - 无效指针错误

用 C 创建动态矩阵

memory - MMU 和内存 Controller 的区别

在 C 中创建一个带有字符的字符串数组

c - 如何确定预处理器中 C 整数类型 MIN/MAXes 的关系?

Python 名称和变量

JavaScript 从匿名函数中读取私有(private)变量