zeb*_*und 81 c++ void-pointers
可能重复:
什么是void指针,什么是空指针?
我经常看到类似于以下内容的代码:
void * foo(int bar);
这是什么意思?这是否意味着它可以返回任何东西?这是类似dynamic
或object
在C#?
Nic*_*las 100
A void*
并不意味着什么.它是一个指针,但它指向的类型是未知的.
这不是它可以返回"任何东西".返回void*
一般的函数正在执行以下操作之一:
operator new
并malloc
返回:指向特定大小的内存块的指针.由于内存没有类型(因为它还没有正确构造的对象),因此它是无类型的.IE : void
.此结构是什么样dynamic
或object
在C#.这些工具实际上知道原始类型是什么; void*
没有.这使得它比任何一个都危险得多,因为它很容易弄错,并且无法询问特定用法是否正确.
另外,如果您看到void*
经常使用"s"的代码,您应该重新考虑您正在查看的代码.void*
用法,特别是在C++中,应该是罕见的,主要用于处理原始内存.
Use*_*988 28
Void用作关键字.该空指针,也被称为通用指针,指针是一种特殊类型,它可以在任何数据类型的对象指出!void指针被声明为普通指针,使用void关键字作为指针的类型:
一般语法:
void* pointer_variable;
void *pVoid; // pVoid is a void pointer
Run Code Online (Sandbox Code Playgroud)
void指针可以指向任何数据类型的对象:
int nValue;
float fValue;
struct Something
{
int nValue;
float fValue;
};
Something sValue;
void *pVoid;
pVoid = &nValue; // valid
pVoid = &fValue; // valid
pVoid = &sValue; // valid
Run Code Online (Sandbox Code Playgroud)
但是,因为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
Run Code Online (Sandbox Code Playgroud)
来源:链接
Mar*_*som 23
void*
如果要在不指定类型的情况下指示指向大块内存的指针,则使用指针.C malloc
返回这样一个指针,期望你立即将它强制转换为特定类型.在将其转换为另一种指针类型之前,它确实没用.您应该知道要将其转换为哪种类型,编译器没有反射功能来知道底层类型应该是什么.