【发布时间】:2018-05-31 18:06:05
【问题描述】:
我们在用户输入过程中使用 & 运算符。这意味着我们正在将特定值分配给特定变量的内存地址。但是在赋值过程中,我们不需要和号。在没有任何内存地址规范的情况下如何传递值?示例代码如下。
#include<stdio.h>
int main()
{
int a, b, total;
scanf("%d%d", &a, &b); //& for memory address
total = a+b; //how the value is being tranfarred to total without any memory address?
printf("%d", total);
return 0;
}
【问题讨论】:
-
我猜你首先需要查找的概念是“按值传递”和“按引用传递”。其中哪些在 C 中使用。
-
scanf需要知道将值放在哪里,因此将需要该值的变量的地址传递给它。如果您刚刚传递了a和b,那么scanf接收这些变量的当前值(如果有,因为a和b尚未初始化),这对它没有用处。 -
类似:
a右侧是a的值。左侧的total是total的reference。对于scanf("%d%d", &a, &b);,&a是 RHS。 -
我一直认为
scanf是邪恶的,是对新学习者的残酷恶作剧,但这是它背信弃义的另一个例子,暗示&在某种程度上是分配任务所必需的一般。 -
@PeterJ_01:这怎么不是编程问题? OP 试图了解 C 的工作原理,这是一个相当微妙的点,与左值以及它们在不同上下文中的处理方式有关。
标签: c memory addressing