我没有得到整数a
和*(&a)
之间的区别?我的意思是*(&a)
返回a
地址中包含的值,它与a
相同,不是吗?那么为什么在这种情况下使用指针呢?
答案 0 :(得分:4)
整数
a
和*(&a)
之间有什么区别?
没有区别。 int a;
将a
声明为int
类型的变量。 &a
a
的地址属于int *
类型,即指针类型,因此可以取消引用。因此,*(&a)
会给出a
的值。
答案 1 :(得分:2)
只要a
是变量,就没有区别,它们是相同的。
但是,如果您在宏中使用该表达式,则它将因为临时对象(*&(x+1)
)或文字(*&5
)的编译器错误而失败。也许在代码中进行区分是有原因的。
答案 2 :(得分:0)
以此为例,
int a = 1;
int *ptr = &a;
ptr
指向内存中的某个地址,而ptr
本身的地址在内存中是不同的。
现在,看看下图,
// *ptr = *(&a)
// Get the adress of `a` and dereference that address.
// So, it gives the value stored at `a`
memory address of a -> 0x7FFF1234
value stored at 0x7FFF1234 = 1
memory address of ptr -> 0x7FFF4321
value stored at 0x7FFF4321 = &a = 0x7FFF1234
+-------+
+------------> 0x7FFF1234 ---->|a = 1 |
| +-------+
| +-----------------+
| | ptr = |
+--*ptr<-------| 0x7FFF1234 [&a] |<--- 0x7FFF4321
+-----------------+
因此,两者之间存在无差异,即int a
和*(&a)
相同。
答案 3 :(得分:0)
更重要的是,您通常不会写*(&a)
或*&a
。这可能是由宏或其他东西引起的,但你通常永远不会明确地写出类似的东西。你可以把它带到极端:*&*&*&*&*&*&a
同样适用。你可以自己试试:
#include <stdio.h>
int main()
{
int a = 123;
int b = *&*&*&*&*&*&a;
printf("%d\n", b);
return 0;
}