1

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

4

5 回答 5

3

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

没有...

class_ptr = NULL;

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

*class_ptr = NULL;

引用(指向)的对象设置为class_ptrNULL0class_ptr本身保有其价值。

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

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

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


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

这就像破坏房子的方向和破坏房子之间的区别。

于 2012-09-10T23:15:08.657 回答
2

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

class_ptr = NULL;

有效地将指针设置为NULL

另一方面:

*class_ptr = NULL;

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

于 2012-09-10T23:14:49.633 回答
1

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

于 2012-09-10T23:13:56.020 回答
0

不,这些行不一样。

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

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

于 2012-09-10T23:16:13.320 回答
0

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

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

于 2012-09-10T23:19:21.307 回答