怎么判断void指针的类型
时间: 2023-10-01 21:11:34 浏览: 104
在C语言中,`void`类型指针可以指向任何类型的数据,因此无法确定其指向的数据类型。如果需要使用`void`指针所指向的数据,需要将其转换为具体的类型指针。
例如,如果有一个`void*`类型的指针`p`,可以通过以下方式将其转换为`int*`类型的指针:
```c
void* p;
int* ptr = (int*)p;
```
需要注意的是,将`void*`类型的指针转换为其他类型指针时,需要确保其所指向的数据类型与转换后的指针类型是匹配的。否则可能会导致程序出现未定义的行为。
还可以通过使用`typeid`运算符来获取`void*`指针所指向的对象类型的信息,例如:
```c
void* p;
if (typeid(*reinterpret_cast<int*>(p)) == typeid(int)) {
// p指向的是int类型数据
}
```
相关问题
用typeid能判断void指针的类型吗
在C++中,`typeid`运算符可以用于获取表达式的类型信息,但是对于`void*`类型的指针,`typeid`运算符不能直接使用,因为`void`类型不是一个具体的类型。
不过,可以通过使用`reinterpret_cast`运算符将`void*`类型的指针转换为具体的类型指针,然后使用`typeid`运算符获取其类型信息。例如:
```c++
void* p;
if (typeid(*reinterpret_cast<int*>(p)) == typeid(int)) {
// p指向的是int类型数据
}
```
需要注意的是,在Objective-C中,`typeid`运算符不是一个标准的语言特性,因此不能直接使用。可以使用Objective-C提供的`isKindOfClass:`方法或`isMemberOfClass:`方法来判断对象的类型,包括`void*`类型的指针所指向的对象类型。
Objective-C中怎么判断void指针的类型
在Objective-C中,可以使用`isKindOfClass:`方法或`isMemberOfClass:`方法来判断一个对象的类型,包括`void`指针所指向的对象类型。
例如,如果有一个`void*`类型的指针`p`,可以将其转换为`id`类型的指针,然后通过`isKindOfClass:`方法或`isMemberOfClass:`方法来判断其所指向的对象的类型:
```objective-c
void* p;
id obj = (__bridge id)p;
if ([obj isKindOfClass:[NSString class]]) {
// p指向的是NSString类型的对象
} else if ([obj isMemberOfClass:[NSNumber class]]) {
// p指向的是NSNumber类型的对象
} else {
// p指向的对象类型不是NSString或NSNumber
}
```
需要注意的是,将`void*`类型的指针转换为其他类型指针时,需要确保其所指向的数据类型与转换后的指针类型是匹配的。否则可能会导致程序出现未定义的行为。
阅读全文