请问什么时候*&p和p等价, 什么时候&*p和p等价?
时间: 2024-10-04 20:01:04 浏览: 18
在C/C++中,`*`运算符用于解引用指针(获取指针所指向的值),而`&`运算符用于获取变量或表达式的地址。因此,`*&p`和`p`等价的情况发生在:
1. 当`p`已经是一个指向某个非`NULL`值的指针时,`*&p`实际上就是`*p`,两者都返回指针所指向的值。
```c++
int x = 5;
int *p = &x; // p指向x
cout << *&p == *p << endl; // 输出true
```
另一方面,`&*p`和`p`等价的情况发生在:
2. 当`p`是一个指针,但它本身并不是另一个指针的地址(即不是二级指针,也不是`void**`这样的情况),那么`&*p`返回的是`p`所指向值的地址,而非`p`这个指针本身的地址。
```c++
int x = 5;
int *p = &x; // p指向x
cout << &(*p) == p << endl; // 输出true,因为它们都是x的地址
```
如果`p`是一个二级指针或者更复杂的复合结构中的指针,`&*p`通常不会等于`p`,因为它获取的是内部指针的地址,而不是整个结构的地址。
阅读全文