《C++大学教程》学习笔记(八)
2018-02-12 00:40
225 查看
《C++大学教程》学习笔记(八)
1.指针基本
向函数传递参数有三种方式:按值传递
使用引用参数的按引用传递
使用指针参数的按引用传递
用const修饰指针,这里有三种情况要区分:
const int * ptr; //指向const数据的非const指针,ptr可以改变 int * const ptr; //指向非const数据的const指针,*ptr可以改变 const int * const ptr; //指向const数据的constant指针,什么都不能变
sizeof函数应用到一个数组名和指向该数组的指针时会得到的不同的结果。当应用到内置数组名时,它返回这个数组的总字节数;当应用到指向该数组的指针时则只会返回这个指针的字节数(??略有疑惑)。
通过下面这段程序可以了解这之间的不同:
#include <iostream> using namespace std; size_t getSize(double * ); int main(){ double n[20]; double * nPtr = nullptr; //一个指针应该初始化为nullptr或一个具体地址 nPtr = n; cout << sizeof(n) << endl << sizeof(nPtr) << endl << getSize(n) << endl; return 0; } size_t getSize(double * ptr){ return sizeof(ptr); }
运行结果是:
好像说不出个所以然。。。
2指针运算及数组
当一个指针加/减一个整数时(包括自增自减),它会加/减去这个整数与该整数指向对象的字节大小的乘积。而两个数组指针相减,举个例子:如果p1地址3000,p2地址3008,假设都是指向int数组的指针,那么当执行
x = p2 - p1;
时,x的值为2。这个算式把p1到p2的内置数组元素的个数赋值给x,也就是
(3008 - 3000)B / 4B = 2,由此也能联想到这种情况下主存是按字节(B)编址的。
对于数组与指针:
int b[5]; int *bPtr;
当我们执行
bPtr = b; //或者 bPtr = &b[0];
之后,如果想要访问数组的元素,除了b[3]这样之外
通过
*( bPtr + 3 ); //或者 bPtr[3];
也能访问。
3.基于指针的字符串
比较传统的基于指针(数组)的字符串,有四种声明方式:char color[] = "blue"; char color[] = {"blue"}; char color[] = {'b','l','u','e','\0'}; const char *colorPtr = "blue"; //指针式
这种方式使用起来比较麻烦,既然C++中提供了string,那非特殊需要就不要用基于指针的字符串了。
相关文章推荐
- 《C++大学教程》学习笔记 第四章:控制语句(第一部分)
- 《C++大学教程》学习笔记 第五章:控制语句(第二部分)
- 《C++大学教程》学习笔记(十五)
- 《C++大学教程》学习笔记(四)
- 《C++大学教程》学习笔记(九)
- 《C++大学教程》学习笔记 第二章:C++编程入门
- 《C++大学教程》学习笔记(十)
- 《C++大学教程》学习笔记(十一)
- 《C++大学教程》学习笔记(十二)
- 《C++大学教程》学习笔记(一)
- 《C++大学教程》学习笔记(五)
- 《C++大学教程》学习笔记(六)
- 《C++大学教程》学习笔记(七)
- 《C++大学教程》学习笔记(二、三)
- 《C++大学教程》学习笔记(十六)
- 《C++大学教程》学习笔记(十四)
- 学习《JavaScript高级程序设计》学习笔记(一)
- 《图解HTTP》学习笔记(六)-HTTP首部
- Silverlight:Dependency Property(依赖属性)学习笔记
- 《STL源码剖析》学习笔记