本节书摘来自异步社区出版社《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 普通指针相关推荐

  1. 《C和C++代码精粹》——1.8 标准流

    本节书摘来自异步社区出版社<C和C++代码精粹>一书中的第1章,第1.8节,作者: [美]Chuck Allison,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  2. 《C和C++代码精粹》——1.7 类型安全I/O

    本节书摘来自异步社区出版社<C和C++代码精粹>一书中的第1章第1.7节,作者: [美]Chuck Allison,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  3. 在你的代码中使用Boost智能指针

    在你的代码中使用Boost智能指针 Smart Pointers to boost your code(By peterchen)  翻译 masterlee Download source file ...

  4. 从底层原理到花式技巧,用图文和代码讲透C语言指针

    一.前言 如果问C语言中最重要.威力最大的概念是什么,答案必将是指针!威力大,意味着使用方便.高效,同时也意味着语法复杂.容易出错.指针用的好,可以极大的提高代码执行效率.节约系统资源:如果用的不好, ...

  5. java导致native非法指令,Java代码引起的NATIVE野指针问题(上)

    朴英敏,小米MIUI部门.从事嵌入式开发和调试工作8年多,擅长逆向分析方法,主要负责解决安卓系统稳定性问题. 上周音乐组同事反馈了一个必现Native Crash问题,tombstone如下: pid ...

  6. c语言指针测试代码,一个关于C语言指针的测试

    前几天有个同学让我帮他看一道关于指针的二级题.当时虽然做出来了,但感觉对概念还是有点模糊,所以刚刚就做了一个小测试. 测试代码是这样的: #include #include using namespa ...

  7. 代码注释法学习智能指针intrusive_ptr

    智能指针intrusive_ptr一般情况下不要使用,除非被指类的某个成员函数需要返回this指针. 因为intrusive_ptr需要自己实现引用计数,所以实现起来比较复杂.还要实现intrusiv ...

  8. c语言指针代码大全,C语言之指针(示例代码)

    五.指针: 5.1.指针也是一种变量,拥有所有变量所拥有的所有的属性. 5.2.用于访问存储空间. 5.2.1.使用变量名进行存储空间的访问是比指针进行的访问更安全的. 5.2.2.在变量名无法使用的 ...

  9. iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)

    代码: // 修改进度条的指针图片 [self.progressSlider setThumbImage:[UIImage imageNamed:@"player_slider_playba ...

最新文章

  1. leetcode算法题--Unique Paths II
  2. 如何扩展CentOS7的SWAP分区
  3. 实施工程师1分钟即时演讲_我是如何在1年内从时装模特转变为软件工程师的
  4. 新娘JAVA_Java之趣味编程结婚问题
  5. EOS Keosd概述
  6. 201771010126 王燕《面向对象设计 java》第十五周实验总结
  7. 微信智能硬件平台 简介
  8. 重装上阵,全新的「极光开发者」公众号来了,关注送大礼!
  9. spark streaming之 windowDuration、slideDuration、batchDuration​
  10. paip.erlang环境搭建和脚本式escript运行halo world 在windows下attilax总结
  11. 关于单例模式中,饿汉式和懒汉式有什么区别?
  12. MagicDraw-IBD图
  13. OSI网络七层协议与TCPIP协议
  14. 百度世界2020再曝语义理解领域新进展:文心ERNIE全景图亮相
  15. 计算机文档考试题目及答案,计算机word考试题及答案解析
  16. Java进阶(四)多态
  17. STM32通过(软/硬IIC)控制LCD1602液晶显示屏(IIC转8位并口的PCF8574转接板的使用)原创
  18. thinkpad怎么把计算机设置到桌面,联想ThinkPad笔记本Fn键关闭与启用方法
  19. java反编译是什么_什么是Java代码的编译与反编译?
  20. php doc转swf,centos安装openoffice将doc、ppt、txt、xls等转换成pdf,再转换成swf用‍FlexPaper显示...

热门文章

  1. nginx lua 安装spdy
  2. OSChina 周日乱弹 —— 表白的终极境界!
  3. 云南“爆款”景区相继停业整顿 旅游大省为环保让路
  4. DPM2007轻松恢复Exchange邮件,DPM2007系列之三
  5. 如何建设一个适配“百度轻舟计划”的移动站
  6. C#调用C++的DLL函数另一则(delegate) z
  7. 笔记:Linux下C编程实现每隔一秒向文件中写入当前时间
  8. svm理论与实验之11:svm开发工具包LibSVM
  9. Css Font 详细研究
  10. C#与Excel互操作