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 @ 2022-08-03 16:46  Happinesspill  阅读(57)  评论(0)    收藏  举报