繁体   English   中英

C和C++中void指针的区别

[英]Difference between void pointers in C and C++

为什么以下在 C++ 中是错误的(但在 C 中有效)

void*p;
char*s;
p=s;
s=p; //this is wrong ,should do s=(char*)p;

为什么我需要转换,因为p现在包含char指针的地址,而s也是char指针?

这是有效的 C,但不是 C++; 它们是两种不同的语言,即使它们确实有许多共同点。

在 C++ 中,没有从void*到类型指针的隐式转换,因此您需要进行强制转换。 您应该更喜欢 C++ 转换,因为它们限制了允许的转换,因此有助于防止错误:

s = static_cast<char*>(p);

更好的是,您应该首先使用多态技术(例如抽象基类或模板)来避免使用无类型指针; 但这超出了这个问题的范围。

值不重要,类型重要。 由于p是空指针而s是 char 指针,因此您必须进行强制转换,即使它们具有相同的值。 在 C 中没问题, void*是通用指针,但在 C++ 中这是不正确的。

顺便说一下, p包含 char 指针,它是一个空指针,它包含一个内存地址。

一般来说,这条规则甚至与指针没有任何关系。 只是您可以将某种类型的值分配给其他类型的变量,但并非总是相反。 类似的情况是这样的:

double d = 0.0;
int i = 0;

d = i;    // Totally OK
i = d;    // Warning!

所以这只是你必须忍受的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM