0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

void指针简述

嵌入式应用开发 来源: 嵌入式应用开发 作者:嵌入式应用开发 2022-09-09 08:57 次阅读

为何在这里单独提到空指针类型呢?主要是因为该指针类型很特殊。void类型很容易让人想到是空的意思,但对于指针而言,其并不是指空,而是指不确定。在很多时候指针在申明的时候可能并不知道是什么类型或者该指针指向的数据类型有多种再或者程序员仅仅是想通过一个指针来操作一段内存空间。这个时候可以将指针申明为void类型。但是问题来了,由于void类型原因,对于确定的数据类型解引时,编译器会根据类型所占的空间来解引相应的数据,例如int p,那么p就会被编译器解引为p指针的地址的4个字节的空间大小。但对于空指针类型来说,编译器如何知道其要解引的内存大小呢?先看一段代码:

#include 

int main(int argc, char **argv)
{
    int a=10;
    void *p;
    p=&a;
    printf("p=%d\n",*p);
    return 0;
}

编译上面的程序会发现,编译器报错,无法正常编译。

poYBAGMZ4nKAefrEAADxquWvkvQ554.png

这说明编译器确实是在解引时无法确定*p的大小,因此这里必须告诉编译器p的类型或者*p的大小,如何告诉呢?很简单,用强制类型转换即可,如下:

*(int*)p

这样上面的程序就可以写为如下:

#include 

int main(int argc, char **argv)
{
    int a=10;
    void *p;
    p=&a;
    printf("p=%d\n",*(int*)p);
    return 0;
}
pYYBAGMZ4qCABRhYAAAofCNx7Sg596.png

void指针没有指定类型的指针即指针只有地址数据属性,不具备解引时的空间 大小属性。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70363
  • void
    +关注

    关注

    0

    文章

    23

    浏览量

    9782
收藏 人收藏

    评论

    相关推荐

    【设计技巧】指针的使用注意事项:空指针指针赋值、void *指针

    的类型多么复杂,比如一个特别大的结构体,它的指针和一个 char型指针的大小本质上是一样的,因为指针就是起始地址。 正式由于这个原因,(void )型
    发表于 08-20 08:30

    什么是void指针void指针有何功能

    [导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.40.1什么是void指针
    发表于 02-21 06:01

    C语言voidvoid指针深层探索

    1.概述 本文将对void关键字的深刻含义进行解说,并详述voidvoid指针类型的使用方法与技巧。 2.void的含义
    发表于 09-21 11:36 166次下载

    深入了解void指针背后的机理

    当使用关键字void声明指针变量时,它将成为通用指针变量。任何数据类型(char,int,float等)的任何变量的地址都可以赋值给void指针
    发表于 05-06 09:49 1226次阅读

    浅谈void指针的高阶用法

    要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.40.1 什么是void指针
    的头像 发表于 08-09 15:54 1383次阅读
    浅谈<b class='flag-5'>void</b> 型<b class='flag-5'>指针</b>的高阶用法

    void指针的高阶用法,你掌握了吗?

    关注+星标公众号,不错过精彩内容转自 | 嵌入式客栈要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ...
    发表于 12-02 12:36 8次下载
    <b class='flag-5'>void</b> 型<b class='flag-5'>指针</b>的高阶用法,你掌握了吗?

    STM32编程:void指针高阶用法举例,设计一个通用掉电存储子系统

    [导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.40.1什么是void指针
    发表于 12-27 18:47 10次下载
    STM32编程:<b class='flag-5'>void</b><b class='flag-5'>指针</b>高阶用法举例,设计一个通用掉电存储子系统

    STM32编程:void指针高阶用法

    [导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR fo...
    发表于 02-07 11:14 2次下载
    STM32编程:<b class='flag-5'>void</b><b class='flag-5'>指针</b>高阶用法

    C语言-void类型作为万能指针类型

    空类型`。 void abc; //这是错误的 但是`void`是可以定义指针的,`void*`表示万能型指针类型,可以与任何
    的头像 发表于 08-14 10:04 1479次阅读

    指针长度简述

    我们使用这样的方式来定义一个指针: Type *p; 我们说 p是指向type类型的指针 ,type可以是任意类型,除了可以是char,short, int, long等基本类型外,还可以是指针类型
    的头像 发表于 09-29 18:42 3575次阅读
    <b class='flag-5'>指针</b>长度<b class='flag-5'>简述</b>

    一文揭秘C语言的void指针

    void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。
    的头像 发表于 02-02 17:18 1251次阅读

    什么是void指针

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*类型的。C语言是强类型的语言,对类型的区分十分严格,不同的类型占据的空间大小不同,地址偏移量也会不
    的头像 发表于 02-13 15:02 1045次阅读

    void指针

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*类型的。C语言是强类型的语言,对类型的区分十分严格,不同的类型占据的空间大小不同,地址偏移量也会不
    的头像 发表于 02-20 15:09 545次阅读

    void指针的特性介绍

    普通类型指针,包含两个方面,一个是指向此类型变量的地址,另外一个是指向变量的长度。
    的头像 发表于 03-14 14:44 581次阅读

    如何理解C++中的void

    首先void*中的void代表一个任意的数据类型,"星号"代表一个指针,所以其就是一个任意数据类型的指针
    的头像 发表于 03-30 15:01 3090次阅读
    如何理解C++中的<b class='flag-5'>void</b>?