做这些清晰的函数在C++中做同样的事情

Do these clear functions do the same thing in C++

本文关键字:清晰 函数 C++      更新时间:2023-10-16

那么这两个函数在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。然而,我想确保他们确实都在这样做。

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

不。。。

class_ptr = NULL;

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

*class_ptr = NULL;

设置class_ptr所指(指向)的NULL,即0。CCD_ 7本身保持其值。

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

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

请注意,如果不存在从intNULL的值为0)到class_ptr所指的任何类型的隐式转换,代码甚至不会编译(这让我认为这个特定的指针命名不好)。


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

这就像摧毁通往房子的方向和摧毁房子之间的区别。

不,他们没有这么做。此:

class_ptr = NULL;

有效地将指针设置为NULL

另一方面:

*class_ptr = NULL;

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

不,它们不同。第一个将指针设置为NULL。第二个将其指向的内容设置为空

不,这些行不一样。

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

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

如果这两段代码明显不同,它们会做两件不同的事情。对于一个清晰的函数来说,第一个似乎最有可能是正确的。如果第二个是设置指针指向两个的值,那么将其设置为NULL是不明确的。当它编译(NULL=0)时,它看起来是错误的,很可能是错误的。

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