void指针
没有返回类型的指针称为空指针。它可以是任何类型的数据类型。
- void指针是一种不明确类型的指针,任何指针都可转为void指针
- void指针只保存了指针两个重要信息其中的一个,即只存储了指针目标的内存首地址
- 若需要对void指针操作,先将void指针指向原先指向的类型
下面看代码
#include <stdio.h>
int main() {
int n = 500;
int *p = &n;
void *pv = p; //只存储了指针目标的内存首地址,没有保存指针的类型
void *pv1 = ( void * )p; //强制转换成void指针,上行是隐式转换
printf("%d\n", *(( int * )pv)); //先把pv转回int*类型,再对其取值
//printf("%d\n", *pv); //报错:dereferencing 'void *' pointer,
//因没有保存指针类型,编译器也不知要取多少字节的数据
//用void指针历遍一维数组
int a[] = { 1, 3, 5, 7, 9 };
void *pa = a; //等同于 &a[0] 数组名在表达式中会转为数组首元素的首地址
for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
printf("%hd\t", *(( int * )pa + i)); //先把pa转为int类型指针,再加偏移量
//注意,不能写成下面这样。因为pa是一个void指针,如果先对其加i就不能起到移动数组下一个元素的作用了
//printf("%hd\t", *( (int*)(pa+i) ));
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)