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

    xiaoxiao2024-03-10  118

    本节书摘来自异步社区出版社《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

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

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

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

    相关资源:C和C 代码精粹
    最新回复(0)