这些明确的函数在C ++中是否做同样的事情

时间:2012-09-10 23:11:25

标签: c++ pointers

这两个函数在C ++中完成同样的事情吗?

void MYCLASS::clear() {
classSize = 0;
class_ptr = NULL;
}

void MYCLASS::clear() {
classSize = 0;
*class_ptr = NULL;
}

在我的头文件中声明int *class_ptr的位置。当我将鼠标悬停在Visual Studio上时,将class_ptr显示为相同的类型。

我相信他们都将class_ptr指向NULL。但是,我想确保他们确实都是这样做的。

5 个答案:

答案 0 :(得分:3)

  

我相信他们都将class_ptr指向NULL。

...都能跟得上

class_ptr = NULL;

将指针的值设置为NULL,即class_ptr == NULL

*class_ptr = NULL;

class_ptr引用的内容(点数)设置为NULL ,即0class_ptr本身保留了它的价值。

指针的值是一个地址。驻留在该地址的是(应该)指针本身类型的表示,即

int *p = new int(10);
/* ... */
 p  <-- an address, let's say, 0x0000F8BE
*p  <-- an int, 10

请注意,如果不存在从intNULL的值0)到class_ptr引用的任何类型的隐式转换,则代码不会甚至编译(这让我相信这个特殊的指针命名很差)。


编辑:我非常喜欢@Mooing Duck的类比,我偷了它(他没有发布答案,所以我不认为他会介意)。

  

这就像摧毁房屋方向和摧毁房屋之间的区别。

答案 1 :(得分:2)

不,他们没有做同样的事情。这样:

class_ptr = NULL;

有效地将指针设置为NULL

另一方面:

*class_ptr = NULL;

class_ptr指向的地址内容设置为NULL。在这种情况下,由于class_ptr的类型为int*,而NULL被定义为整数值0,因此您将指针的内容设置为0 }。

答案 2 :(得分:1)

不,他们是不同的。第一个将指针设置为NULL。第二个设置为什么指向为空

答案 3 :(得分:0)

不,这些行不一样。

class_ptr = NULL;将指针设置为0.实际的整数(指针指向的位置)不会被修改。你只是失去指针。

*class_ptr = 0;将取消引用指针并将实际整数的值设置为0.您将保留指针,此后它仍然有效。

答案 4 :(得分:0)

鉴于这两段代码明显不同,它们会做两件不同的事情。对于明确的功能,第一个看起来最可能是正确的。鉴于第二个是设置指针指向两个值的值,将其设置为NULL是不明确的。当它编译(NULL = 0)时,它看起来是错误的,所以可能是。

我的猜测是第一个是你想要的。