0.void*简介

void*是一种特殊的指针类型,可用于存放任意对象的地址。

void *pv =&obj; // obj 可以是任意类型的对象

void指针pv只保存了对象obj的首地址,并不知道obj是什么类型,所以通过pv无法取出obj。但是如果我们指明obj的类型,我们就可以取出obj对象。例子如下:

#include <iostream>
using namespace std;int main() {int b = 1;void *a = &b;cout << a<<endl;           cout << (int*)a<<endl;  // 输出与cout << a;一致cout << *((int*)a);    // 输出1。(int*)a将void指针强制转换为int类型,相当于指明了a为int型。return 0;
}

1.void*作为函数形参

#include <stdio.h>int void_test(void* data)
{int num = 0;num = *(int*)data;       // (int*)的作用是将data当成一个int指针(强制类型转换)printf("num = %d\n", num);}int main()
{int val;val = 123;void_test(&val);return 0;
}
// 将以上代码编译并运行,输出结果为:
// num = 123

2.void指针的加一操作

在ANSI中下面代码是错误的

void * pvoid;
pvoid++; //ANSI:错误
pvoid += 1; //ANSI:错误

GNU指定void *的算法操作与char *一致

void * pvoid;
pvoid++; //GNU:正确
pvoid += 1; //GNU:正确

为迎合ANSI标准,并提高程序的可移植性,我们可以这样编写实现同样功能的代码:

void * pvoid;
(char *)pvoid++; //ANSI:正确;GNU:正确
(char *)pvoid += 1; //ANSI:错误;GNU:正确

GNU和ANSI还有一些区别,总体而言,GNU较ANSI更“开放”,提供了对更多语法的支持。但是我们在真实设计时,还是应该尽可能地迎合ANSI标准。

其他

如果函数的参数可以是任意类型指针,那么应声明其参数为void *
典型的如内存操作函数memcpy和memset的函数原型分别为:

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

参考:https://www.cnblogs.com/geekham/p/4225993.html

void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型相关推荐

  1. C++ void指针(void *)

    void* 是一种特殊的指针类型,可用于存放任意对象的地址.一个 void* 指针存放着一个地址,这一点和其他指针类似. 在介绍 void 指针前,简单说一下 void 关键字使用规则: 如果函数没有 ...

  2. C++ void指针(void*)简介

    void* 是一种特殊的指针类型,可用于存放任意对象的地址.一个 void* 指针存放着一个地址,这一点和其他指针类似. 在介绍 void 指针前,简单说一下 void 关键字使用规则: 如果函数没有 ...

  3. C语言指针超全面透析(原来你一直没有搞懂C语言指针是因为没有理解其中的规律)

    文章目录 写在前面 一.思考指针的基础 1.指针的实质 2.指针的层次 3.指针的分类 4.两个符号(&和*) 二.单指针(int *p) 三.指针数组(int *p[10]) 四.行指针(i ...

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

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

  5. C++中指针和void

    void和void指针 void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指 ...

  6. 浅谈 “空指针、野指针、void*”

            Author: JW. Zhou Date: 2014/7/2 一.空指针(0/NULL) 返回NULL和返回0是完全等价的,因为NULL和0都表示空指针,换句话说:空指针是什么,就是 ...

  7. C++:指针:void*指针(跳跃力未定的指针)

    先分享一段代码,觉得很有意思 #include<iostream> void* say_hello(void* args){std::cout<< "Hello wo ...

  8. void指针(void *)是什么?如何使用它

    void 指针的使用规则 1. void 指针可以指向任意类型的数据,就是说可以用任意类型的指针对 void 指针赋值.例如: int *a: void *p: p=a: 如果要将 void 指针 p ...

  9. C语言特殊指针——const指针、void指针、NULL指针、零指针、野指针

    const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性 指向常量的指针: const int *pa; int const *pa; 两者等 ...

最新文章

  1. 小白搞懂了GC全过程,全靠阿里专家12张图
  2. jQuery的get()和post()方法
  3. Day 14 20190129 老男孩python学习第14天 内容整理
  4. 面试:一文搞懂Java集合
  5. 腾讯IDG投资的明星无人车公司Zoox,拿下硅谷第一张载客许可
  6. 让 “微软雅黑” 在IE6下完美显示
  7. Codeforces Education Round 11
  8. IBM AIX5.3 linux下C/C++实现HTTPS接口
  9. 用计算机函数,信息技术应用 用计算机画函数图象教案设计(一等奖)
  10. 基于STM32C8T6F103实现串口通信
  11. element el-select 支持拼音码和中文检索 检索的时候必须加属性 filterable
  12. 阿里云备案流程和操作步骤详解(图文教程)
  13. 数据采集—数据采集技术
  14. Mars3D开发基础学习:Property属性机制
  15. 多测师肖sir_高级金牌讲师_linux命令一(2.4)
  16. c++ 的vector sort遇到栈错误
  17. C++小游戏——俄罗斯方块
  18. 读《读大学,究竟读什么》感悟一
  19. chapter04_聪明的表设计
  20. ppt中如何加入flash

热门文章

  1. oracle锁资源不够,Oracle解锁,解决“ora00054:资源正忙”错误
  2. 实操| 前端新人无敲代码开发APP
  3. Linux重启命令shutdown与reboot
  4. 应力奇异,你是一个神奇的应力!
  5. 谈谈对Python爬虫的理解
  6. 多视图几何的数学基础知识的掌握(2)--李群李代数
  7. C++我记得应该是当初笔试面试常考的
  8. 实时操作系统和非实时操作系统的区别
  9. Android图形系统之HWComposer
  10. html代码制作的个人简历