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

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

3天内不再提示

什么是C语言(void*)类型

汽车电子技术 来源:微亮笔记 作者:PASSION 2023-02-24 14:31 次阅读

大家在C语言的学习过程中肯定见过各种指针符号,如 int*, char* 等等等等。顾名思义,int就是一个指向整形的指针,而char则是一个指向字符的指针,而 “ void* ”是什么呢?本期就为大家介绍 空指针

void指针一般被称为通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针是void型指针时,所指向的对象不属于任何类型。

1、void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据。和用int表示指针异曲同工,只是更明确是“指针”。

因此void*只能表示一个地址,不能用来&取值,也不能移动指针,因为不知道多少字节是一个数据单位。

2、void *就是一个不能动的“地址”,在进行&、移动指针之前必须转型为类型指针。

3、指针在只知道内存,但是不知道是什么类型的时候。

4、在C/C++中,在任意时刻都可以使用其它类型指针来代替void指针,或者用void指针来代替其他类型指针。

5、对指针变量的解引用,使用间接运算符*达到目的。但是在使用空指针的情况下,需要转换指针变量解引用。这是因为空指针没有与之关联的数据类型。编译器无法知道void指针指向的数据类型。因此,要获取由void指针指向的数据,需要使用在void指针位置内保存的正确类型的数据进行类型转换。

也就是说,void*类型的指针可以接受任意类型的指针

但是不能够进行解引用操作,也不能进行加减运算

需要注意的是,void* 即使在接收某一具体类型的指针后,它的类型依然是void*,我们仍然无法对其进行解引用操作,需要进行强制类型转换才可以。

由于空指针的特殊性,我们一般将其运用在函数参数里,用以接收各种类型的参数。

例:

void* e1;
*(int*)e1;

下面附带一个有空指针参与的qsort(快速排序)函数

注1:由于qsort是库函数,因此我在编写时将函数名改为了 ‘my_qsort’

注2:此函数只是向大家展示空指针的应用,其中仍有指针方面的知识,我们会在后续章节具体介绍

qsort 函数
void swap(char*buf1,char*buf2,int width)
//交换函数
{
  for (int i = 0;i < width;i++)
  {
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;    
buf1++;    
buf2++;
  }
 }
void my_qsort(void* base,int sz,int width, int (*cmp)(void* e1,void* e2))
{
  for (int i = 0;i < sz;i++)
  {    for (int j = 0;j < sz - 1 - i;j++)
{      //两个元素的比较
      if (cmp((char*)base + j * width, (char*)base + (j + 1) * width)>0) 
     {        //交换
        swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
      }
    }
  }
}int cmp_int(const void* e1, const void* e2)
{
  return *(int*)e1 - *(int*)e2;
}
int main()
{
  int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  my_qsort(arr, sz, sizeof(arr[0]), cmp_int);}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128712
  • Int
    Int
    +关注

    关注

    0

    文章

    22

    浏览量

    16009
  • 符号
    +关注

    关注

    0

    文章

    55

    浏览量

    4215
收藏 人收藏

    评论

    相关推荐

    C语言void指针的基本认识及典型应用

    C语言中,*类型就是指针类型,比如 int *p,double *q,虽然是不一样的指针,但是大小却一样sizeof(p) == sizeof(q),因为它们都是同一种类型*
    发表于 02-01 09:26 849次阅读

    详细讲解c语言enum枚举类型

    详细讲解C语言enum枚举类型在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样
    发表于 12-21 23:22

    C语言中数据类型介绍(基本类型、构造类型、指针类型、空类型

    C语言数据类型包括:基本类型、构造类型、指针类型、空类型
    发表于 07-19 09:09

    C语言的数据类型有哪些?

    C语言的数据类型(基础类型+结构体)
    发表于 12-25 07:06

    C语言数组类型有哪些?

    C语言数组类型有哪些?
    发表于 10-15 09:06

    请问在C语言中如何使用bool类型

    C语言中如何使用bool类型
    发表于 10-22 07:20

    C预处理与C语言基本数据类型

    指令表:注意:宏名的书写由标识符与两边各两条下划线构成。C语言基本数据类型不同操作系统中数据类型所占字节数图解数据类型的其他分类:变量常量(
    发表于 12-21 08:29

    C语言基础与数据类型概述

    一、C语言基础与数据类型1.GCC概述GCC最初的全名是GNU C Compiler(开源社区)变成GNU Compiler Collection翻译官翻译组织文件后缀名gcc.cgc
    发表于 12-23 06:58

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

    一般被称为通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针是void型指针时,所指向的对象不属于任何类型。 因为void指针
    发表于 02-21 06:01

    C语言voidvoid指针深层探索

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

    类型和弱类型语言有什么区别

    类型语言也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有
    发表于 12-04 15:45 2.4w次阅读
    强<b class='flag-5'>类型</b>和弱<b class='flag-5'>类型</b>的<b class='flag-5'>语言</b>有什么区别

    浅谈void 型指针的高阶用法

    通用指针或叫泛指针。它是C语言关于纯粹地址的一种约定。当某个指针是void型指针时,所指向的对象不属于任何类型。 因为void指针不属于任何类型
    的头像 发表于 08-09 15:54 1383次阅读
    浅谈<b class='flag-5'>void</b> 型指针的高阶用法

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

    void类型在基本数据类型里是`空类型`,`无类型`; void
    的头像 发表于 08-14 10:04 1479次阅读

    一文揭秘C语言void指针

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

    如何理解C++中的void

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