《C和C++代码精粹》——2.6 const指针
本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.6节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.6 const指针
C和C++代码精粹
注意memcpy函数第二个参数中的const关键字。这个关键字告诉编译器此函数将不会改变source指向的任何值(除了强制类型转换)。当把指针作为参数传递时,总是合适地使用const限定符是一个很好的习惯,它不仅可以防止你无意中错误的赋值,而且还可以防止在作为参数将指针传递给函数时可能会修改了本不想改变的指针所指向的对象的值。例如,如果在程序清单2.6中的声明是:
const int i=7,j=8;
有可能因为下面这条语句而得到警告:
swap(&i,&j);
因为swap的确改变了其参数所指的变量的值。
如果浏览一下你所使用的编译器提供的标准头文件,就会看到const。在一个声明中,当const出现在星号前面的任意位置时,表明所指向的内容不会被改变:
const char *p; //指向常字符的指针 char const *q; //同样是指向常字符的指针 char c; c=*p; //OK(假设p和q已经初始化了) *q=c; //错误,不能改变指针所指的内容
也可以通过把const放在星号的后面来声明指针本身不可改变:
char* const p; *p='a'; //OK,只有指针是常量 ++p; //错误,不能改变指针
要禁止改变指针和它所引用的内容,就在星号前和后都使用const:
const char* const p; char c; c=*p; //OK-能读出内容 *p='a'; //错误 ++p; //错误
程序清单 2.7中的函数inspect说明了如何打印出任何对象的不同字节。因为我并没有改变对象的内容,所以第一个参数是一个指向const的指针,而且,在使用它之前要小心地将它转换成一个指向常字符的指针。
程序清单2.7 检查任何对象的函数
// inspect.cpp: 检查对象的字节 #include <iostream> #include <iomanip> using namespace std; void inspect(const void* ptr, size_t nbytes) { const unsigned char* p = (const unsigned char*) ptr; cout.setf(ios::hex, ios::basefield); for (int i = 0; i < nbytes; ++i) cout << "byte " << setw(2) << setfill(' ') << I << ": " << setw(2) << setfill('0') << int(p[i]) << endl; } main() { char c = 'a'; short i = 100; long n = 100000L; double pi = 3.141529; char s[] = "hello"; inspect(&c, sizeof c); cout << endl; inspect(&i, sizeof i); cout << endl; inspect(&n, sizeof n); cout << endl; inspect(&pi, sizeof pi); cout << endl; inspect(s, sizeof s); cout << endl; } //输出: byte 0: 61 byte 0: 64 byte 1: 00 byte 0: a0 byte 1: 86 byte 2: 01 byte 3: 00 byte 0: 13 byte 1: 7c byte 2: d3 byte 3: f4 byte 4: d9 byte 5: 21 byte 6: 09 byte 7: 40 byte 0: 68 byte 1: 65 byte 2: 6c byte 3: 6c byte 4: 6f byte 5: 00
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《iOS 9 开发指南》——第1章,第1.4节iOS 9中的常用开发框架
本节书摘来自异步社区《iOS 9 开发指南》一书中的第1章,第1.4节 iOS 9中的常用开发框架,作者 管蕾,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 iOS 9中的常用开发框架iOS 9 开发指南图片 2 知识点讲解:光盘:视频知识点第1章 iOS 9中的常用开发框架.mp4为了提高开发iOS程序的效率,除了可以使用Xcode集成开发工具之外,还可以使用第三方提供的框架,这些框架为我们提供了完整的项目解决方案,是由许多类、方法、函数和文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易。在OSX下的Mac操作系统中,大约存在80个框架,这些框架可以用来开发应用程序,处理Mac的Address Book结构、刻制CD、播放DVD、使用QuickTime播放电影和播放歌曲等。 在iOS的众多框架中,其中有两个最为常用的框架:Foundation框架和Cocoa框架。 1.4.1 Foundation框架简介在OSX下的Mac操作系统中,为所有程序开发奠定基础的框架称为Foundation框架。该框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组、...
- 下一篇
《Android应用开发》——1.1节下载开发软件
本节书摘来自异步社区《Android应用开发》一书中的第1章,第1.1节下载开发软件,作者 【美】Chris Haseman,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.1 下载开发软件Android应用开发首先,需要下载几个软件工具,也就是Android SDK、Eclipse集成开发环境(IDE)和Eclipse所用的Android插件。还有其他很多工具可以用来创建Android应用,当前这种设置争议最少,并且能在最短的时间内让系统运转起来。 1.1.1 Android SDK访问Android开发者网站http://developer.android.com。随着在这个平台上进行开发,会越来越熟悉这些页面。上了网站之后,就找到标有SDK的区域,下载所提供的那些文件。在Windows系统上,最好用系统提供的安装程序。对于Mac和Linux用户,会得到一个ZIP压缩文件。选好合适的文件开始下载,下载完成后继续其他操作。 1.1.2 Eclipse对于3.5版本以上的Eclipse,Google推荐使用IDE经典版。访问www.eclipse.org/downloads,找...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能