可能重复:
What is a void pointer and what is a null pointer?什么是C++中的void指针?
我经常看到代码,类似于像下面这样:
void * foo(int bar);
这是什么意思?这是否意味着它可以返回什么?这与C#中的dynamic
或object
类似吗?
可能重复:
What is a void pointer and what is a null pointer?什么是C++中的void指针?
我经常看到代码,类似于像下面这样:
void * foo(int bar);
这是什么意思?这是否意味着它可以返回什么?这与C#中的dynamic
或object
类似吗?
A void*
并不意味着什么。它是一个指针,但它指向的类型是未知的。
这并不是说它可以返回任何东西。返回void*
的函数一般会执行以下操作之一:
operator new
和malloc
返回的内容:指向特定大小内存块的指针。由于内存没有类型(因为它没有一个适当构造的对象),它是无类型的。 IE:void
。这是什么像dynamic
或object
在C#。那些结构实际上知道原始类型是什么; void*
不是。这使得它比其中任何一个更危险,因为它很容易弄错。
并且在个人记录中,如果您看到使用void*
的“经常”代码,则应该重新考虑您正在查看的代码。 void*
用法,尤其是在C++中应该很少见,主要用于处理原始内存。
void *可以指向任何东西(这是一个没有任何类型信息的原始指针)。
任何指针都可以指向任何东西。 – 2011-12-16 05:21:46
A void*
指针用于指示指向大块内存而不指定类型的指针。 C的malloc
返回这样一个指针,期望您立即将其转换为特定类型。直到将其转换为另一个指针类型时,它才真正有用。您需要知道将其转换为哪种类型,编译器没有反射能力来知道底层类型应该是什么。
那么,C的`malloc`实际上并不期望你立即将它转换为其他东西,因为在C中,`void *`会自动提升为一个真正的指针类型:http://stackoverflow.com/q/605845/ 837703。 C++是一个不同的故事,但你应该在C++中使用`new`。 – 2015-07-11 22:12:48
@ArkaMajumdar隐式演员仍然是演员。指针的类型发生变化,这使得它变得有用。 – 2015-07-12 00:44:28
Void用作关键字。指针,也称为泛型指针,是一种特殊类型的指针,可以指向任何数据类型的对象!一个空指针被宣布像一个正常的指针,用void关键字作为指针的类型:
常规语法:
void* pointer_variable;
void *pVoid; // pVoid is a void pointer
一个空指针可以指向任何数据类型的对象:
int nValue;
float fValue;
struct Something
{
int nValue;
float fValue;
};
Something sValue;
void *pVoid;
pVoid = &nValue; // valid
pVoid = &fValue; // valid
pVoid = &sValue; // valid
但是,由于void指针不知道它指向的是什么类型的对象,因此无法解除引用!相反,void引用必须首先明确地转换为另一个指针类型,然后才能解除引用。
int nValue = 5;
void *pVoid = &nValue;
// can not dereference pVoid because it is a void pointer
int *pInt = static_cast<int*>(pVoid); // cast from void* to int*
cout << *pInt << endl; // can dereference pInt
类似问题的链接:http://stackoverflow.com/questions/4334831/what-is-a-void-pointer-and-what-is-a-null-pointer – ksming 2011-12-16 05:17:46
它与`动态无关`并且与`object`只有很大的“相似性”。 – 2011-12-16 05:18:02