为什么指针地址的输出不同?

meh*_*hdi 1 c++ pointers

我很困惑,考虑到我们有一个如下课程:

#ifndef SOMECLASS
#define SOMECLASS
class SomeClass
{
    public:
        SomeClass();
        SomeClass(int);
        ~SomeClass();
        void foo(const int&);
}
#endif
Run Code Online (Sandbox Code Playgroud)

及其实施....

所以在主要功能:

int main(int argc, char **argv){
    SomeClass* smc=new SomeClass();
    cout<<smc<<"--"<<&smc<<"--"<<&*smc; 
}
Run Code Online (Sandbox Code Playgroud)

我的输出如下:

0xf66210----0x7ffd622a34f0----0xf66210
Run Code Online (Sandbox Code Playgroud)

为什么smc和&smc和&*smc之间存在差异?请注意,smc和&*smc相等.

我正在使用ubuntu(14.04_x64)和+ cmake(2.18)+ gcc(4.8.4)

All*_*nzi 7

smc是指针的值smc,它smc是指向的地址.

&smc是指针smc本身的地址.

&*smcsmc指向的地址(指向的是*smc),所以它是相同的smc.


Dav*_*aim 5

这里有两个变量:
1.指针,即堆栈分配
2.对象,即堆分配

smc是堆上存在的实际对象的地址.
因此,&*smc取消引用地址,然后再次引用它,然后得出相同的结果.记住,*&像对运营商,像加号和减号.添加和减去相同的数量会产生相同的结果,就像再次引用和引用一样.

&smc 是指针变量的地址,它位于堆栈上.

如果您仍然不清楚,请考虑以下示例:

int* x = nullptr;
Run Code Online (Sandbox Code Playgroud)

什么是x价值?什么是&x

现在?
x = new int(6)
x的新值是多少?它的地址是什么?