
C++ 0506 引用和指针
函数返回值:当函数不返回任何值时,函数返回值通常是void。 指向未知类型的数据:void指针可以用来存储任何类型的数据指针,如int、char、double等。 静态_cast(static_cast):用于在两种相关类型之间进行转换。例如:
发布日期:2021-05-08 04:49:45
浏览次数:14
分类:精选文章
本文共 1448 字,大约阅读时间需要 4 分钟。
void指针与类型转换
void指针是C语言中的一个特殊类型,它表示“指向编译器未知的内存空间”。理解void指针对于编程的重要性,可以帮助我们更好地处理不同类型的数据。
void指针的含义
void指针表示的是一个空的内存空间,编译器无法推断该空间存储的数据类型。它通常用于以下两种场合:
函数返回值
在C语言中,函数返回值可以是任何类型的值,包括void。例如:
void f();
函数f()
没有返回值,它实际上返回一个void类型的值。要返回其他类型的值,函数返回类型就需要声明。
指针赋值
void指针可以存储任何类型的指针。例如:
void* pv1 = new int; // 正确:int* 转换为void*void* pv2 = new double[10]; // 正确:double* 转换为void*
这两个代码示例都是合法的,因为void指针可以存储任何类型的指针。
类型转换
在C语言中,类型转换可以通过多种方式实现,常见的有:
int* pi = static_cast(pv); // 正确:将void*转换为int*
- 重新解释_cast(reinterpret_cast):用于在两种不相关类型之间进行转换。例如:
- 去掉const_cast:用于移除const限定符。例如:
- 指针赋值:指针赋值会改变指针本身的值,而不是指针指向的对象值。例如:
- 引用赋值:引用赋值会改变引用指向的对象的值,而不是引用本身的值。例如:
- 深拷贝与浅拷贝:引用赋值通常需要执行深拷贝(复制对象的所有成员变量),而指针赋值不需要。
- 指针参数:
- 引用参数:
int* pi = reinterpret_cast(pv); // 正确:将void*转换为int*
const int* pc = &x;int* pi = const_cast(pc); // 正确:移除const限定符
指针与引用的区别
指针和引用在内存管理上有明显的区别:
int x = 10;int* p = &x; // 通过&获取指针*p = 7; // 通过p修改x的值int x2 = *p; // 通过p读取x的值
int y = 10;int& r = y; // 引用r指向yr = 7; // 修改y的值int y2 = r; // r仍然指向y
指针参数与引用参数
在函数调用中,指针和引用参数的使用有以下区别:
void foo(int* p) { // p是指向int的指针}
void bar(int& r) { // r是int类型的引用}
总结
void指针是一个强大的工具,它允许我们处理不同类型的数据指针。通过合理使用静态_cast、重新解释_cast和const_cast,我们可以在不同的类型之间进行转换。同时,了解指针与引用的区别,可以帮助我们更好地管理内存和对象。
通过实践和不断的练习,我们可以更熟练地使用void指针和类型转换,提升我们的编程能力。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月11日 04时37分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
爬取网易科技滚动新闻
2019-03-05
vuex modules
2019-03-05
Java笔记:单链表
2019-03-05
phthon基本语法——温习
2019-03-05
sleep、wait、yield、join——简介
2019-03-05
web项目配置
2019-03-05
VTK:Medical之MedicalDemo2
2019-03-05
c语言(基本数据类型)实参与形参传值 用汇编理解
2019-03-05
基于单片机可控音乐流水灯控制设计-全套资料
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
并发框架下的“基础类型”——浅析基本类型、ThreadLocal、原子类的线程安全机制
2019-03-05
VHDL代码风格
2019-03-05
图像处理系列1.skimage
2019-03-05
Object Clone
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
2021年判断浏览器最新写法,你都掌握了吗?
2019-03-05
【IoT】蓝牙BLE基础:CC254x通信系列之模拟SPI协议
2019-03-05
【IoT】TI BLE CC2541 串口控制蓝牙详解
2019-03-05