关于指针的澄清

mr5*_*mr5 2 c++ pointers

Object* pObject;
Object object;
pObject = &object;
Run Code Online (Sandbox Code Playgroud)

是否objectpObject被分配的内存一样多吗?

Object* pObject1, pObject2, pObject3;
Object object;
pObject1 = &object;
pObject2 = &object;
pObject3 = &object;
Run Code Online (Sandbox Code Playgroud)

pObject1 = &object;
pObject2 = pObject1;
pObject3 = pObject1;
Run Code Online (Sandbox Code Playgroud)

两者有什么区别?它是安全的取消引用pObject2,并pObject3在第二个例子?

Jay*_*Jay 5

在第一个代码段中,内存中只有一个对象. object是"对象"类型.pobject是"地址Object" 的类型.

翻译:

Object* pObject;    // Objectp is a POINTER that may be used for objects of type Object
Object object;      // Allocate on the stack an "Object". Call it "object"
pObject = &object;  // pObject points (that is, stores the ADDRESS of) object
Run Code Online (Sandbox Code Playgroud)

在你的第二个代码中,会有三个变量类型为"某种类型Object的地址",所有变量都包含地址Object.指针就像"代表内存地址的数字".但是,正如Gorpik所说,你应该声明它们

Object *pObject1, *pObject2, *pObject3;
Run Code Online (Sandbox Code Playgroud)

这就是为什么在这种情况下保持星号接近名称 - 在这种情况下pObject- 而不是类型 - 的原因之一Object.读它像"类型Object:指针pObject1指向什么,指针pObject2指向什么"等.

第三个代码段具有相同的效果.这三个变种都得到了地址object.