《C和C++代码精粹》——2.5 普通指针
本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.5节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.5 普通指针
C和C++代码精粹
通常编写能接收指向任意类型参数的函数是很方便的。这是很有必要的,例如,用标准的库函数memcpy,能够从一个地址向另一个地址拷贝一块内存。你也可能想调用memcpy来拷贝自己创建的结构:
struct mystruct a,b;
/*...*/
memcpy(&a,&b,sizeof(struct mystruct));
为了操作任意类型的指针,memcpy把它头两个参数声明为void型指针。可以不需要强制类型转换将任何类型的指针赋予void类型。也可以在C而不是在C++中将void赋予其他任何类型的指针。这里说明了void指针的memcpy函数的简洁实现:
void* memcpy(void* target, const void* source, size_t n)
{ char* targetp = (char*) target; const char* sourcep = (const char*) source; while (n--) *targetp++ = *sourcep++; return target;
}
这个版本的memcpy必须把指向void的指针赋予指向char的指针,这样它就可以每次传递内存块的一个字节,并对这个字节中的数据进行拷贝。试图复引用一个void*是没有意义的,因为它的大小是未知的。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
《C和C++代码精粹》——2.5 普通指针相关推荐
- 《C和C++代码精粹》——1.8 标准流
本节书摘来自异步社区出版社<C和C++代码精粹>一书中的第1章,第1.8节,作者: [美]Chuck Allison,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 《C和C++代码精粹》——1.7 类型安全I/O
本节书摘来自异步社区出版社<C和C++代码精粹>一书中的第1章第1.7节,作者: [美]Chuck Allison,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 在你的代码中使用Boost智能指针
在你的代码中使用Boost智能指针 Smart Pointers to boost your code(By peterchen) 翻译 masterlee Download source file ...
- 从底层原理到花式技巧,用图文和代码讲透C语言指针
一.前言 如果问C语言中最重要.威力最大的概念是什么,答案必将是指针!威力大,意味着使用方便.高效,同时也意味着语法复杂.容易出错.指针用的好,可以极大的提高代码执行效率.节约系统资源:如果用的不好, ...
- java导致native非法指令,Java代码引起的NATIVE野指针问题(上)
朴英敏,小米MIUI部门.从事嵌入式开发和调试工作8年多,擅长逆向分析方法,主要负责解决安卓系统稳定性问题. 上周音乐组同事反馈了一个必现Native Crash问题,tombstone如下: pid ...
- c语言指针测试代码,一个关于C语言指针的测试
前几天有个同学让我帮他看一道关于指针的二级题.当时虽然做出来了,但感觉对概念还是有点模糊,所以刚刚就做了一个小测试. 测试代码是这样的: #include #include using namespa ...
- 代码注释法学习智能指针intrusive_ptr
智能指针intrusive_ptr一般情况下不要使用,除非被指类的某个成员函数需要返回this指针. 因为intrusive_ptr需要自己实现引用计数,所以实现起来比较复杂.还要实现intrusiv ...
- c语言指针代码大全,C语言之指针(示例代码)
五.指针: 5.1.指针也是一种变量,拥有所有变量所拥有的所有的属性. 5.2.用于访问存储空间. 5.2.1.使用变量名进行存储空间的访问是比指针进行的访问更安全的. 5.2.2.在变量名无法使用的 ...
- iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)
代码: // 修改进度条的指针图片 [self.progressSlider setThumbImage:[UIImage imageNamed:@"player_slider_playba ...
最新文章
- leetcode算法题--Unique Paths II
- 如何扩展CentOS7的SWAP分区
- 实施工程师1分钟即时演讲_我是如何在1年内从时装模特转变为软件工程师的
- 新娘JAVA_Java之趣味编程结婚问题
- EOS Keosd概述
- 201771010126 王燕《面向对象设计 java》第十五周实验总结
- 微信智能硬件平台 简介
- 重装上阵,全新的「极光开发者」公众号来了,关注送大礼!
- spark streaming之 windowDuration、slideDuration、batchDuration​
- paip.erlang环境搭建和脚本式escript运行halo world 在windows下attilax总结
- 关于单例模式中,饿汉式和懒汉式有什么区别?
- MagicDraw-IBD图
- OSI网络七层协议与TCPIP协议
- 百度世界2020再曝语义理解领域新进展:文心ERNIE全景图亮相
- 计算机文档考试题目及答案,计算机word考试题及答案解析
- Java进阶(四)多态
- STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创
- thinkpad怎么把计算机设置到桌面,联想ThinkPad笔记本Fn键关闭与启用方法
- java反编译是什么_什么是Java代码的编译与反编译?
- php doc转swf,centos安装openoffice将doc、ppt、txt、xls等转换成pdf,再转换成swf用FlexPaper显示...
热门文章
- nginx lua 安装spdy
- OSChina 周日乱弹 —— 表白的终极境界!
- 云南“爆款”景区相继停业整顿 旅游大省为环保让路
- DPM2007轻松恢复Exchange邮件,DPM2007系列之三
- 如何建设一个适配“百度轻舟计划”的移动站
- C#调用C++的DLL函数另一则(delegate) z
- 笔记:Linux下C编程实现每隔一秒向文件中写入当前时间
- svm理论与实验之11:svm开发工具包LibSVM
- Css Font 详细研究
- C#与Excel互操作