void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型
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转换指针类型相关推荐
- C++ void指针(void *)
void* 是一种特殊的指针类型,可用于存放任意对象的地址.一个 void* 指针存放着一个地址,这一点和其他指针类似. 在介绍 void 指针前,简单说一下 void 关键字使用规则: 如果函数没有 ...
- C++ void指针(void*)简介
void* 是一种特殊的指针类型,可用于存放任意对象的地址.一个 void* 指针存放着一个地址,这一点和其他指针类似. 在介绍 void 指针前,简单说一下 void 关键字使用规则: 如果函数没有 ...
- C语言指针超全面透析(原来你一直没有搞懂C语言指针是因为没有理解其中的规律)
文章目录 写在前面 一.思考指针的基础 1.指针的实质 2.指针的层次 3.指针的分类 4.两个符号(&和*) 二.单指针(int *p) 三.指针数组(int *p[10]) 四.行指针(i ...
- C语言-指针-基础用法、运算、指针与数组、指针数组、多级指针、void指针和const修饰符-学习笔记08
文章目录 1. 地址和变量 2. 指针 2.1 基本声明 2.2 指针的目标 3. 指针的运算 3.1 指针的赋值运算 3.2 指针的算术运算 3.2.1 指针与常量的加法与减法 3.2.2 两指针相 ...
- C++中指针和void
void和void指针 void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指 ...
- 浅谈 “空指针、野指针、void*”
Author: JW. Zhou Date: 2014/7/2 一.空指针(0/NULL) 返回NULL和返回0是完全等价的,因为NULL和0都表示空指针,换句话说:空指针是什么,就是 ...
- C++:指针:void*指针(跳跃力未定的指针)
先分享一段代码,觉得很有意思 #include<iostream> void* say_hello(void* args){std::cout<< "Hello wo ...
- void指针(void *)是什么?如何使用它
void 指针的使用规则 1. void 指针可以指向任意类型的数据,就是说可以用任意类型的指针对 void 指针赋值.例如: int *a: void *p: p=a: 如果要将 void 指针 p ...
- C语言特殊指针——const指针、void指针、NULL指针、零指针、野指针
const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性 指向常量的指针: const int *pa; int const *pa; 两者等 ...
最新文章
- 小白搞懂了GC全过程,全靠阿里专家12张图
- jQuery的get()和post()方法
- Day 14 20190129 老男孩python学习第14天 内容整理
- 面试:一文搞懂Java集合
- 腾讯IDG投资的明星无人车公司Zoox,拿下硅谷第一张载客许可
- 让 “微软雅黑” 在IE6下完美显示
- Codeforces Education Round 11
- IBM AIX5.3 linux下C/C++实现HTTPS接口
- 用计算机函数,信息技术应用 用计算机画函数图象教案设计(一等奖)
- 基于STM32C8T6F103实现串口通信
- element el-select 支持拼音码和中文检索 检索的时候必须加属性 filterable
- 阿里云备案流程和操作步骤详解(图文教程)
- 数据采集—数据采集技术
- Mars3D开发基础学习:Property属性机制
- 多测师肖sir_高级金牌讲师_linux命令一(2.4)
- c++ 的vector sort遇到栈错误
- C++小游戏——俄罗斯方块
- 读《读大学,究竟读什么》感悟一
- chapter04_聪明的表设计
- ppt中如何加入flash