c/c++中void定义的空类型指针(void* p)要怎么使用(强制类型转换)以及使用场景(函数指针)

news/2024/10/18 17:42:51/

     我们先看看下面的代码,p是一个void类型的指针,ch是一个char类型的变量,当我们用p来保存ch的地址时,我们却无法通过*p来对ch的值进行访问,因为char会自动转化为void*类型的指针,也就是空类型指针,空类型指针(无类型可以是任意类型)只存储地址的值,丢失类型,无法访问,要访问其值,就要对这个指针进行强制类型转换    

        char* p1 = (char*)p;
        printf("p1 指向的字符是:  %c\n",*p1);//值为a

     通过这段代码就能对ch的值进行访问了
 

int main(void) {int arr[] = { 1,2,3,4,5 };char ch = 'a';void* p = arr; //定义了一个void 类型的指针p = &ch;//其它类型会自动转换成void *指针printf("p: 0x%p ch: 0x%p\n", p, &ch);//结果是p和ch的地址相同且都能打印出来//强制类型转化char* p1 = (char*)p;printf("p1 指向的字符是:  %c\n",*p1);system("pause");return 0;
}

  那么什么时候会用到空指针类型呢?请看下面

  void 指针可以指向任意类型的数据,不受数据类型限制,可以在程序中给我们带来一些好处,函数中形参为指针类型时,我们可以将其定义为 void 指针,这样函数就可以接受任意类型的指针。如:

典型的如内存操作函数 memcpy 和 memset 的函数原型分别为:

 
void * memcpy(void *dest, const void *src, size_t len);void * memset ( void * buffer, int c, size_t num );

这样,任何类型的指针都可以传入 memcpy 和 memset 中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型


http://www.ppmy.cn/news/1540046.html

相关文章

一些简单的编程题(Java与C语言)

引言: 这篇文章呢,小编将会举一些简单的编程题用来帮助大家理解一下Java代码,并且与C语言做个对比,不过这篇文章所出现的题目小编不会向随缘解题系列里面那样详细的讲解每一到题,本篇文章的主要目的是帮助小编和读者们…

ZBrush和3D-Coat各自的优缺点是什么?

zbrush支持的模型面数高英文界面,3d coat支持的模型面数比zbrsh低有中文界 ZBrush优缺点 1、ZBrush优点: zbrush是高精度建模poser制作的首选。可搭配雕刻版使用,主要为烘焙高细节的铁图建模。因为是高精度模型,不适用于动画和游…

CANIOT网关CAN透传功能的具体介绍

来可电子的CANIOT透传网关具有CAN数据透传功能,接下来介绍一下具体的操作步骤和如何在电脑上显示接收的数据。 首先我们给网关通电,并将网关的CAN口连接到我们的CAN设备上,这里我们使用来可电子的USBCAN卡来模拟CAN设备发送数据,…

【原创教程】工控人升维必看:激光传感器的应用案例

在自动化控制中,有很多传感器,今天我们看一款激光传感器,工作原理是由激光发射二极管对准目标发射激光脉冲,经目标反射后激光向各方向散射,部分散射光回到传感器接收器,被光学系统接受后成像到光电二极管上。 本系统我们采用的西门子SMART200系列,用的是6ES7288-0AA0模…

Axure重要元件三——中继器函数

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器函数 主要内容:Item、Reperter、TargetItem 1、中继器的函数:Item\Reperter\TargetItem Item item:获取…

网络通信与并发编程(二)基于tcp的套接字、基于udp的套接字、粘包现象

基于tcp的套接字 文章目录 基于tcp的套接字一、套接字的工作流程二、基于tcp的套接字通信三、基于udp的套接字通信四、粘包现象 一、套接字的工作流程 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个…

网络原理 - HTTP/HTTPS

文章目录 HTTP抓包工具浏览器内置了抓包工具WiresharkFiddler使用 HTTP 协议格式请求响应 HTTP 请求 (Request)URL 基本格式URL encode认识 "方法" (method)GET 方法POST 方法经典面试题: 谈谈 GET 和 POST 的区别其他方法 认识请求 "报头" (header) HTTP …

Go Wails 学习笔记:创建第一个项目

文章目录 1. 安装 Wails2. 创建 Wails 项目3. 项目结构4. 运行项目5. 构建项目6. 部署和发布总结 Wails 是一个用于构建跨平台桌面应用程序的框架,允许开发者使用前端技术(如 HTML、CSS、JavaScript)以及 Go 语言来开发桌面应用。本文基于官方…