做这些清晰的函数在C++中做同样的事情
Do these clear functions do the same thing in C++
那么这两个函数在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
请注意,如果不存在从int
(NULL
的值为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)时,它看起来是错误的,很可能是错误的。
我的猜测是,第一个是你想要的。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 当完全替换一个函数时,有可能得到一个清晰的gitdiff吗
- 做这些清晰的函数在C++中做同样的事情
- 一个清晰的函数的时间复杂度是多少,根据大 O,是 std::map
- 处理类中的函数,为了清晰起见,应该将其分解为函数
- 如何从构建的DLL中获得清晰的导出函数名?我总是听到原创的名字+胡言乱语