C语言void指针教程

在 void 的意思就是 “无类型”,void 指针则为 “无类型指针”,void 指针可以指向

void指针使用

在 C 语言中在任何时候都可以用 void 类型的指针来代替其他类型的指针,void 指针可以指向任何数据类型的变量。

如果要通过 void 指针去获取它所指向的变量值时候,需要先将 void 指针强制类型转换成和变量名类型相匹配的数据类型指针后再进行操作。

任何类型的指针都可以赋值给 void 指针,无需进行强制类型转换。

C语言void指针详解

定义

void *p

说明

我们使用 void * 定义了一个万能指针。

void指针使用场景

对函数参数的限定。

对函数返回的限定。

void 指针也常用作函数指针。

void指针强制类型转换详解

语法

*((int*)pa

说明

我们将一个 void 类型的指针 pa,转换成了 int 类型的指针,并取其值。

案例

定义void指针

void 指针可以指向任何数据

#include

int main(){

printf("嗨客网(www.haicoder.net)\n\n");

int a = 1024;

void *pa = &a;

printf("pa = %p\n", pa);

return 0;

}

程序运行后,控制台输出如下图所示:

我们首先,定义了一个 int 类型的变量 a,接着,我们定义了一个 void 类型的指针,该指针用来保存了 int 类型的变量的地址,因此,我们可以看出,void 指针可以保存任何数据类型的地址。

void指针不可以直接使用

void 指针不可以直接使用,必须经过类型转换后才可以使用

#include

int main(){

printf("嗨客网(www.haicoder.net)\n\n");

int a = 1024;

void *pa = &a;

printf("pa = %p, *pa = %d\n", pa, *pa);

return 0;

}

程序运行后,控制台输出如下图所示:

我们直接使用 *pa,打印了 void 指针指向的变量的值,我们发现程序报错,因为,void 指针不可以直接使用,必须经过

#include

int main(){

printf("嗨客网(www.haicoder.net)\n\n");

int a = 1024;

void *pa = &a;

printf("pa = %p, *pa = %d\n", pa, *((int*)pa));

return 0;

}

程序运行后,控制台输出如下图所示:

这次,我们在打印的时候,将 void 指针强制类型转换成了 int 指针,最后,我们看到可以正确输出了 void 指针指向的值,因此,void 指针不可以直接使用,必须强制类型转换后才可以使用。

任何指针都可以赋值给void指针

任何指针无需强制类型转换,都可以赋值给 void 指针

#include

int main(){

printf("嗨客网(www.haicoder.net)\n\n");

int *pa;

double *pb;

long *pc;

void *vpa = pa;

vpa = pb;

vpa = pc;

return 0;

}

程序运行后,控制台输出如下图所示:

我们可以看到,我们分别将 int 类型的指针、double 类型的指针和 long 类型的指针赋值给了 void 类型的指针,因此,我们可以看出,void 类型的指针可以接受任何类型的指针变量。

C语言void指针总结

在 C 语言中,void 指针可以指向任何类型的数据。所以 void 指针一般被称为通用指针或者泛指针,也可以叫做万能指针。在 C 语言中在任何时候都可以用 void 类型的指针来代替其他类型的指针,void 指针可以指向任何数据类型的变量。

如果要通过 void 指针去获取它所指向的变量值时候,需要先将 void 指针强制类型转换成和变量名类型相匹配的数据类型指针后再进行操作。任何类型的指针都可以赋值给 void 指针,无需进行强制类型转换。

c语言void*指针,C语言void指针相关推荐

  1. C语言指针高级部分:void指针和数据指针

    概念 void指针     数据指针 void指针 void指针的基本概念 void的意思就是"无类型",void指针则为"无类型指针",void指针可以指向任 ...

  2. c语言中void指针,C 语言 void指针

    C 语言 void指针 到目前为止,我们已经研究了分配给指针的地址应该与指针声明中指定的类型相同. 例如,如果我们声明了int指针,则此int指针不能指向float变量或某种其他类型的变量,即它只能指 ...

  3. C语言 void 指针 - C语言零基础入门教程

    目录 一.指针简介 二.空指针 NULL 三.void 指针 四.重点总结 五.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.指针简介 ...

  4. c语言 万能函数指针,C/C++编程笔记:C语言精华解析之void *指针,指针中的万能指针...

    什么是万能指针? 万能指针其实就是void *类型的指针,而void *指针一般被称为通用指针或叫泛指针.它是C语言关于纯粹地址的一种约定.当某个指针是void型指针时,所指向的对象不属于任何类型. ...

  5. c语言使用node类型指针,C语言利用 void 类型指针实现面向对象类概念与抽象

    不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象. 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现. 核心: ...

  6. C语言-指针-基础用法、运算、指针与数组、指针数组、多级指针、void指针和const修饰符-学习笔记08

    文章目录 1. 地址和变量 2. 指针 2.1 基本声明 2.2 指针的目标 3. 指针的运算 3.1 指针的赋值运算 3.2 指针的算术运算 3.2.1 指针与常量的加法与减法 3.2.2 两指针相 ...

  7. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  8. c语言输入后没答案,C语言章节习题及答案(无指针)解读.doc

    C语言章节习题及答案(无指针)解读 <C程序设计>复习题集 第2章 基础概念 一.选择题(在下列各题的A).B).C).D)四个选项中,只有一个选项是正确的) 2.1以下叙述中正确的是 A ...

  9. sdh管理单元指针_C语言学习|指针的介绍

    指针是C语言提供的一种特殊而又有非常重要的数据类型. 联合使用指针和结构体这两种数据类型可以有效地表示许多复杂的数据结构,如队列.堆栈.链表.树.图等. 指针这个内容为什么那么的重要? 1.指针为函数 ...

  10. C语言-数组名真的不是指针

    文章目录 1 前言 2 关于一维数组 3 sizeof运算符和自增运算符 4 数组名也不是常量指针 5 总结 1 前言 参照我之前的两篇文章: 二维数组做函数的参数 动态创建二维数组 事实告诉我们,二 ...

最新文章

  1. nginx+keepalived
  2. 网站内链的6大常见形式你了解多少?
  3. 纯JS实现省市县三级下拉联动
  4. 用华为鸿蒙 OS 2.0 系统写出了HelloWorld!那些说鸿蒙是PPT的可以闭嘴了!
  5. 18 个 Python 高效编程技巧,Mark!
  6. php扩展的xdebug,安装php扩展:Xdebug
  7. TQ210——下载总结
  8. 《AIOps在360的落地实践》分享实录
  9. 不可磨灭的记忆 CPU发展史经典回顾
  10. PHP 实现文件上传 php配置
  11. 工业元宇宙的价值和发展
  12. 青少年软件编程(Python)等级考试试卷一级(判断题)2021-9
  13. 元图地图开放平台系统概述
  14. 线下盛会|欢迎关注 Pulsar Summit 2022 旧金山峰会
  15. 面试必备--手写Promise.all与.race
  16. 设计模式之备忘录模式(Memento Pattern)
  17. [noip模拟赛2017.7.4]
  18. 防热服的设计数学建模_高温作业专用服装设计各位厂家提供点解题思路 2018年全国大学生数学建模A题...
  19. 工业以太网抓包工具,可抓取EtherCAT, PowerLink, MODBUS等百兆工业以太网
  20. 2018计算机软件著作权,2018年我国计算机软件著作权登记量破百万件

热门文章

  1. linux _max_path,[apue] Linux / Windows 系统上只能建立不超过 PATH_MAX / MAX_PATH 长度的路径吗?...
  2. android编程实现128条形码的生成和识别
  3. python 3d绘图模块_使用python和mayavi创建3D streamplot
  4. 分区桌面背景制作方法-EXCEL
  5. 【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
  6. VMware15安装mac10.14
  7. JSONObject没有fromObject方法及其依赖引入
  8. 修改Eclipse字体以及背景颜色
  9. 【翻译】AdaIN:Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
  10. centos7 keeplive+lvs