【C】void指针(通用指针)

目录)

      • 1 void 指针(通用指针)
        • 1)用途1:动态内存分配
        • 2)用途2:函数参数传递
        • 3)用途3:空指针
        • 4)注意事项:类型转换
        • 5)示例代码

1 void 指针(通用指针)

当谈到C语言中的void指针时,我们首先要理解指针的基本概念。指针是一种变量类型,它存储了一个内存地址,这个地址指向计算机内存中的某个特定位置。C语言中的指针可以指向不同类型的数据,例如整数、浮点数、字符等。

而void指针(void *)是一种特殊类型的指针,它可以指向任何类型的数据。换句话说,void指针是一种泛型指针,因为它不关心所指向数据的具体类型。这种特性使得void指针在某些情况下非常有用。

总结:

  • 语法:void *ptr;
  • void指针被称为通用指针,因为它可以指向任何类型的数据。
  • 通过void指针,你可以在不知道具体类型的情况下传递数据。
1)用途1:动态内存分配
  • 在C语言中,使用malloccalloc等函数进行动态内存分配时,它们返回的是void指针。你可以将这个void指针赋给任何类型的指针,然后使用这个指针来访问动态分配的内存。
  • 例子:
int *intPtr;
intPtr = (int *)malloc(sizeof(int)); // 在这里,malloc返回的是void指针,我们将其强制类型转换为int指针
void *genericPtr = malloc(100); // 通用指针用于动态内存分配
2)用途2:函数参数传递
  • void指针可以用于函数参数,实现通用的参数传递。
  • 例子:
void process(void *data, size_t size, void (*func)(void *));
3)用途3:空指针
  • void指针也可以用来表示空指针。
  • 例子:
void *ptr = NULL; // 空指针
4)注意事项:类型转换
  • 由于void指针不指向任何特定类型,使用时需要进行类型转换。
  • 例子:
int x = 10;
void *genericPtr = &x;
int *intPtr = (int *)genericPtr; // 类型转换
  • 使用void指针要小心,因为它不提供类型安全性。在使用之前最好明确指针指向的类型。
  • 当你使用void指针进行类型转换时,确保转换是合理和安全的。
5)示例代码
#include <stdio.h>
#include <stdlib.h>// 根据dataType的值,以不同的方式打印data指向的数据
void printValue(void *ptr, char type) {switch (type) {case 'i':printf("%d\n", *((int *)ptr));break;case 'f':printf("%f\n", *((float *)ptr));break;case 'c':printf("%c\n", *((char *)ptr));break;}
}int main() {int intValue = 42;float floatValue = 3.14;char charValue = 'A';void *genericPtr;genericPtr = &intValue;printValue(genericPtr, 'i');genericPtr = &floatValue;printValue(genericPtr, 'f');genericPtr = &charValue;printValue(genericPtr, 'c');return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

销售团队如何实现业绩增长?CRM系统的线索管理功能有什么用?

随着“以客户为中心”观念的逐渐普及&#xff0c;销售团队的客户比过去更复杂&#xff0c;交易周期更久&#xff0c;竞争也更激烈。假如没有明确的销售计划&#xff0c;团队可能陷入混乱&#xff0c;最后导致客户&公司之间的负面结果。在这种情况下&#xff0c;人工智能驱动…

Open CV 图像处理基础:(一)Open CV 在windows环境初始化和 Java 动态库加载方式介绍

Open CV 在windows环境初始化和 Java 动态库加载方式介绍 目录 Open CV 在windows环境初始化和 Java 动态库加载方式介绍OpenCV安装opencv-4.4.0下载安装 加载opencv-4.4.0.jar包jar包引入mavn-init.cmdjar包装载到本地maven仓库pom.xml加载动态库 加载动态库opencv_java440.dl…

基于Python实现身份证信息识别

目录 前言身份证信息识别的背景与意义自动识别身份证的需求 实现环境与工具准备Python编程语言OpenCV图像处理库Tesseract OCR引擎 身份证信息识别算法原理图像预处理步骤(图像裁剪、灰度化 、二值化、去噪)信息提取与解析 Python代码实现通过OCR提取身份证号码代码解析身份证信…

AI分割迁移绘画-neural-style

&#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. 二值化展示图像代码…

docker、docker-compose 离线安装、shell脚本一键安装、卸载

注&#xff1a;二进制包&#xff0c;与脚本在同级目录 docker 离线安装&#xff1a; 包下载&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ docker_install.sh&#xff1a; #!/bin/bash# 指定 Docker 版本和文件名 DOCKER_VERSION"24.0.7" D…

pyenv环境找不到sqlite:No module named _sqlite3

前言 一般遇到这个问题都在python版本管理或者虚拟环境切换中遇到&#xff0c;主要有两个办法解决&#xff0c;如下&#xff1a; 解决方法1 如果使用的pyenv管理python环境时遇到没有_sqlite3 库&#xff0c;可以将当前pyenv的python环境卸载 pyenv uninstall xxx然后在系统…

电位器

一、电位器简介 电位器是一种可调的电子元件。它是由一个电阻体和一个转动或滑动系统组成。当电阻体的两个固定触电之间外加一个电压时&#xff0c;通过转动或滑动系统改变触点在电阻体上的位置&#xff0c;在动触点与固定触点之间便可得到一个与动触点位置成一定关系的电压。…

nbcio-boot项目的文件上传与回显处理方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

如何将Redis、Zookeeper、Nacos配置为Windows系统的一个服务

说明&#xff1a;当我们在Windows上开发时&#xff0c;不可避免的会用到一些中间件&#xff0c;如Redis、Zookeeper、Nacos等等&#xff0c;当在项目中使用到本地的这些服务器时&#xff0c;我们需要把本地的服务器启动&#xff0c;会开启下面这样的一个窗口。 Redis服务器&am…

【ARM 嵌入式 编译系列 3.5 -- gcc 链接参数介绍】

文章目录 gcc 链接参数介绍 gcc 链接参数介绍 上篇文章【ARM 嵌入式 编译系列 3.4 – 查看所依赖库文件的路径 详细介绍】一直在提链接参数&#xff0c;那么链接参数有哪些&#xff0c;它们又有什么作用呢&#xff1f; 如前一篇文章中的的链接参数到底是什么意思呢&#xff1…

uniapp中uview组件库丰富的CountTo 数字滚动使用方法

目录 #平台差异说明 #基本使用 #设置滚动相关参数 #是否显示小数位 #千分位分隔符 #滚动执行的时机 #API #Props #Methods #Event 该组件一般用于需要滚动数字到某一个值的场景&#xff0c;目标要求是一个递增的值。 注意 如果给组件的父元素设置text-align: cente…

C++力扣题目112,113--路径总和,路径总和II

112路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是…

以太网交换机——稳定安全,构筑数据之桥

交换机&#xff0c;起源于集线器和网桥等网络通信设备&#xff0c;它在性能和功能上有了很大的发展&#xff0c;因此逐渐成为搭建网络环境的常用的设备。 随着ChatGPT爆发&#xff0c;因为用户量激增而宕机事件频频发生&#xff0c;云计算应用催生超大规模算力需求&#xff0c;…

java通过okhttp方式实现https请求的工具类(绕过证书验证)

目录 一、引入依赖包二、okhttp方式实现的https请求工具类2.1、跳过证书配置类2.2、okhttp方式的 https工具类 三、测试类 一、引入依赖包 引入相关依赖包 <!--okhttp依赖包--> <dependency><groupId>com.squareup.okhttp3</groupId><artifactId>…

常用的 Python 开发工具以及它们的优势

对于 Python 编程新手来说&#xff0c;选择合适的开发工具是一个关键的步骤。以下是一些常用的 Python 开发工具以及它们的优势&#xff1a; 1. 开发环境 (IDEs): ■ PyCharm: ◆ 优势&#xff1a;提供了强大的代码编辑、调试、代码分析等功能。对于 Django、Flask 和其他 Pyth…

vite和vue启用gzip

Nginx 配置 server {listen 8230;server_name 8230;charset utf-8;gzip on;gzip_buffers 32 4K;gzip_comp_level 6;gzip_min_length 1k;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/x…

力扣(leetcode)第541题反转字符串II(Python)

541.反转字符串II 题目链接&#xff1a;541.反转字符串II 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。 如果剩余字…

Vue、uniApp、微信小程序、Html5等实现数缓存

此文章带你实现前端缓存&#xff0c;利用时间戳封装一个类似于Redis可以添加过期时间的缓存工具 不仅可以实现对缓存数据设置过期时间&#xff0c;还可以自定义是否需要对缓存数据进行加密处理 工具介绍说明 对缓存数据进行非对称加密处理 对必要数据进行缓存&#xff0c;并…

php通用后台开发框架源码

php通用后台开发框架源码 基于ThinkPHPBootstrap的快速后台开发框架。 基于Auth验证的权限管理系统&#xff0c;支持无限级父子级权限继承&#xff0c;父级的管理员可任意 增删改子级管理员及权限设置&#xff0c;支持单管理员多角色&#xff0c;支持管理子级数据或个人数据。 …

探讨回溯算法的秘密(Java实现)

深入探讨回溯算法及Java实现 介绍&#xff1a; 回溯算法是一种经典的递归算法&#xff0c;用于解决在给定约束条件下的搜索问题。它通过尝试所有可能的解决方案&#xff0c;并在不满足约束条件的情况下回溯到上一步&#xff0c;继续尝试其他可能的解决方案。在本文中&#xff…