这两个函数在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。但是,我想确保他们确实都是这样做的。
答案 0 :(得分:3)
我相信他们都将class_ptr指向NULL。
...都能跟得上
class_ptr = NULL;
将指针的值设置为NULL
,即class_ptr == NULL
。
*class_ptr = NULL;
将 class_ptr
引用的内容(点数)设置为NULL
,即0
。 class_ptr
本身保留了它的价值。
指针的值是一个地址。驻留在该地址的是(应该)指针本身类型的表示,即
int *p = new int(10);
/* ... */
p <-- an address, let's say, 0x0000F8BE
*p <-- an int, 10
请注意,如果不存在从int
(NULL
的值0
)到class_ptr
引用的任何类型的隐式转换,则代码不会甚至编译(这让我相信这个特殊的指针命名很差)。
这就像摧毁房屋方向和摧毁房屋之间的区别。
答案 1 :(得分:2)
不,他们没有做同样的事情。这样:
class_ptr = NULL;
有效地将指针设置为NULL
。
另一方面:
*class_ptr = NULL;
将class_ptr
指向的地址内容设置为NULL
。在这种情况下,由于class_ptr
的类型为int*
,而NULL
被定义为整数值0
,因此您将指针的内容设置为0
}。
答案 2 :(得分:1)
答案 3 :(得分:0)
不,这些行不一样。
class_ptr = NULL;
将指针设置为0.实际的整数(指针指向的位置)不会被修改。你只是失去指针。
*class_ptr = 0;
将取消引用指针并将实际整数的值设置为0.您将保留指针,此后它仍然有效。
答案 4 :(得分:0)
鉴于这两段代码明显不同,它们会做两件不同的事情。对于明确的功能,第一个看起来最可能是正确的。鉴于第二个是设置指针指向两个值的值,将其设置为NULL是不明确的。当它编译(NULL = 0)时,它看起来是错误的,所以可能是。
我的猜测是第一个是你想要的。