&地址符为什么不能取(a+b)的地址

地址符号要取得是变量的地址,那么a也是变量,b也是变量,为什么他们相加是没有地址的,或者说他们不是变量了吗

a+b是一个表达式,不是变量,没有固定的存储的地址。

上面的回答已经可以解释了。稍微补充下,在C++中的情况:表达式返回的结果在C++中,临时表达式是右值,不具有持久的内存地址。另外,C++ 中引入了引用的概念,可以使用引用来获取表达式的地址,但需要注意引用必须在声明时初始化,并且一旦绑定到某个对象后,就不能再绑定到其他对象上。
总体来说,C和C++针对这个问题没有太大差别,最终都是不能直接获取临时表达式地址,需要借助一个变量。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7549484
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    在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语言的设计中,表达式的计算结果并不是一个可寻址的内存位置。

    希望对你有所帮助,如果你还有任何问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^