地址符号要取得是变量的地址,那么a也是变量,b也是变量,为什么他们相加是没有地址的,或者说他们不是变量了吗
a+b是一个表达式,不是变量,没有固定的存储的地址。
上面的回答已经可以解释了。稍微补充下,在C++中的情况:表达式返回的结果在C++中,临时表达式是右值,不具有持久的内存地址。另外,C++ 中引入了引用的概念,可以使用引用来获取表达式的地址,但需要注意引用必须在声明时初始化,并且一旦绑定到某个对象后,就不能再绑定到其他对象上。
总体来说,C和C++针对这个问题没有太大差别,最终都是不能直接获取临时表达式地址,需要借助一个变量。
问题解答:
在C语言中,表达式(a + b)
的结果是一个临时的值,它并没有一个明确的内存地址可以被获取。因此,你无法直接使用地址符(&)来获取这个临时值的地址。
表达式(a + b)
相当于一个算术运算,计算结果会被存储在一个临时的内存位置上。这个临时的位置通常是一个寄存器,而不是具体的内存地址。因此,你无法使用地址符来获取这个临时结果的地址。
如果你希望获取(a + b)
的地址,你需要先将结果赋值给一个变量,然后再使用地址符来获取这个变量的地址。例如:
int result = a + b;
int* address = &result;
在这个例子中,我们首先将(a + b)
的结果赋值给了一个整型变量result
,然后使用地址符(&)来获取result
的内存地址,并将其保存在address
变量中。
需要注意的是,这个地址address
只是result
变量在内存中的地址,并不是(a + b)
的地址。因为(a + b)
没有一个具体的内存地址。
因此,如果你实际上需要获取(a + b)
的地址,而不是它的计算结果的地址,那么目前的C语言规范并没有直接的方式来实现这个目标。这是因为C语言的设计中,表达式的计算结果并不是一个可寻址的内存位置。
希望对你有所帮助,如果你还有任何问题,请随时提问。