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;
}
posted @   Happinesspill  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示