《C和C++代码精粹》——2.15 小结

简介:

本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.15节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.15 小结

C和C++代码精粹
C和C++仅仅与那些使用它们的人一样危险。
指针是地址。
可以将任何一个指针赋值成void*。
注意区分一个const指针和一个指向const的指针。
p±n = =(char)p±n sizeof (*p)。
p-q = = ±n 。
*(a+i) = = a [i]。
除非在sizeof和&的上下文中,否则一个数组名即是指向它第一个元素的指针。
没有多维数组,只有数组的数组。
仅是指针的存在并不要求它所引用的类型的实现的有效性(这是一个不完全类型)。
如果理解了这些概念,你就正在逐渐地成为一名可信赖的C++程序员。现在去告诉你的老板,她可以指派你去编写真正的程序。

练习答案
练习2.1

已知如下声明:

int a[ ] = { 10, 15, 4, 25, 3, -4 };
int *p = &a[ 2 ];

下面表达式的结果是什么?

a.  *(p+1)      25
b.  p[-1]        15
c.  p-a           2
d.  a[*p++ ]      3
e.  *(a+a[ 2 ]) 3

练习2.2

下面的语句通过一系列指针表达式修改字符串s,当顺序执行时每个表达式重新得到什么字符,最后的结果是什么?

char s[ ] = "desolate",*p = s;
*p++  = = d;
*(p++)= = e;
(*p)++= = s;
*++p  = = o;
*(++p)= = l;
++*p  = = m;
++(*p )= = n;
strcmp(s,"detonate") = = 0;

练习2.3

image

其中十六进制值是相对于a地址偏移量。

0x0f0  = = 240
0x140  = = 320
0x154  = = 340
0x158  = = 344

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
28天前
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
49 0
|
1月前
|
自然语言处理 安全 C++
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
【C++ 格式化输出 】C++20 现代C++格式化:拥抱std--format简化你的代码
82 1
|
29天前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
68 0
|
1月前
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
83 0
|
1月前
|
安全 Linux 开发者
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
⭐⭐⭐⭐⭐Linux C/C++ 进程崩溃诊断以及有效数据收集:解锁代码问题快速定位与修复的方法
82 1
|
1天前
|
C++
【C++】在使用代码组装URL时,一定要注意的坑......
【C++】在使用代码组装URL时,一定要注意的坑......
7 0
|
22天前
|
C语言 C++ 容器
C调用C++代码
C调用C++代码
12 1
|
28天前
|
算法 程序员 C语言
C++设计哲学:构建高效和灵活代码的艺术
C++设计哲学:构建高效和灵活代码的艺术
60 1
|
28天前
|
安全 NoSQL 程序员
【年度征文 健壮代码 心得体会】 如何编写健壮的C++代码
【年度征文 健壮代码 心得体会】 如何编写健壮的C++代码
52 0
|
30天前
|
存储 缓存 安全
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
【C/C++ 项目优化实战】 分享几种基础且高效的策略优化和提升代码性能
63 0

热门文章

最新文章