C++ void*

含义

void*含义是“指向未知类型对象的指针”。

注意

  1. 除了函数指针、指向类成员的指针外,指向任意类型对象的指针都能被赋给一个void*类型的变量
  2. void*可以和其他类型的指针比较大小
  3. void*可转换为其他指针类型,但可能不安全

实验

#include<stdio.h>
#include<iostream> 

int main() {
	int a = INT_MAX - 100000000;
	int* ptr_int1 = &a;
	// 将int*转换为void*,ptr_void1 == ptr_int1
	// ptr_int1指向的字节序列为ff 1e 0a 7a
	// ptr_void指向的字节序列为ff 1e 0a 7a cc cc cc cc ...(cc为填充字节,因为类型未知,无法确定字节数)
	void* ptr_void1 = ptr_int1;
	// 将void*转换为int*,ptr_int2 == ptr_void1
	// ptr_int2指向的字节序列为ff 1e 0a 7a
	int* ptr_int2 = static_cast<int*>(ptr_void1);
	
	// 将void*转换为float*,ptr_float == ptr_void
	// ptr_float指向的字节序列为ff 1e 0a 7a
	// *ptr_int1 != ptr_float
	float* ptr_float = static_cast<float*>(ptr_void1);
	std::cout << "a is " << a << std::endl;
	std::cout << "*ptr_float is " << *ptr_float << std::endl;

	// 大小为2的数组
	// a[0]对应的字节序列ff 1e 0a 7a
	// a[1]对应的字节序列00 00 00 00
	int b[2]{ INT_MAX - 100000000, 0 };
	// 将数组第一个元素的地址(int*)转换为void*,ptr_void2 == b
	// void*指向的字节序列为ff 1e 0a 7a 00 00 00 00 cc cc cc...
	void* ptr_void2 = b;
	std::cout << b[0] << std::endl;
	// 将void*转换为double*,ptr_double == ptr_void2
	// double*指向的字节序列为ff 1e 0a 7a 00 00 00 00
	// *ptr_double != b[0]
	double* ptr_double = static_cast<double*>(ptr_void2);
	std::cout << "b[0] is " << b[0] << std::endl;
	std::cout << "b[1] is " << b[1] << std::endl;
	std::cout << "*ptr_double is " << * ptr_double << std::endl;

	return 0;
}

程序输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值