C++ primer笔记---指针

1、指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&);
定义指针类型的方法将声明符写成*d的形式,其中d是变量名。
引用不是对象,没有实际地址,不能定义指向引用的指针;

2、指针的值(即地址)应属下列4种状态之一:
1、指向一个对象;
2、指向紧邻对象所占空间的下一个位置;
3、空指针,意味着指针没有指向任何对象。
4、无效指针,也就是上述情况之外的其他值。

3、如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问该对象。

4、紧随类型名的是声明符,出现在表达式中的是操作符。

5、空指针不指向任何对象,最直接的办法是用字面值nullptr来初始化指针,也可以通过将指针初始化为字面值0来生成空指针。过去的指针会用到一个名为NULL的预处理变量来给指针赋值,这个变量在头文件cstdlib中定义,它的值就是0.
(把int变量直接赋给指针是错误的操作,即使int变量的值恰好等于0也不行)

6、要想搞清楚一条赋值语句到底是改变了指针的值还是改变了指针所指对象的值,最好的办法就是记住赋值永远改变的是等号左侧的对象。

7、只要指针拥有一个合法值,就能将它用在条件表达式中,如果指针的值是0,条件取false,任何非0 指针对应的条件值都是true。

8、两个类型相同的合法指针进行比较,如果两个指针存放的地址值相同,则它们相等;反之它们不相等。

9、void*可用于存放任意对象的地址,但不允许使用void*指针操纵它所指向的对象。当函数返回void*类型时表示返回一个特殊的指针类型。

10、单目运算符*的优先级比++高

11、C++使用**操作符指派一个指针指向另一个指针。

12、

13、函数指针
指向函数而非指向对象的指针,函数指针也指向某个特定的函数类型,函数类型由其返回类型以及形参表确定,而与函数名无关。
bool (*pf)(const string &, const string &);
将pf声明为指向函数的指针,它所指向的函数带有两个const string &类型的形参和bool类型的返回值。(*pf两侧的括号是必需的)

14、函数指针只能通过同类型的函数或函数指针或0值常量表达式进行初始化或赋值,将函数指针初始化为0,表示该指针不指向任何函数,指向不同函数类型的指针之间不存在转换。

15、指向函数的指针可用于调用它所指向的函数,可以不需要使用解引用操作符,直接通过指针调用函数。

16、只有当指针已经初始化,或被赋值为指向某个函数,才能用来调用函数。

17、函数的形参可以是指向函数的指针。函数可以返回指向函数的指针。
阅读函数指针声明的最佳方法是从声明的名字开始由里而外理解。

18、允许将形参定义为函数类型,但函数的返回类型则必须是指向函数的指针,而不能是函数。

19、C++允许使用函数指针指向重载的函数;

20、指针的类型:把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型;
指针所指向的类型:把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型

21、指针本身占据4个字节的宽度(32位机器);

22、当一个指针表达式的结果指针已经明确地具有了指针自身占据的内存的话,这个指针表达式就是一个左值,否则就不是一个左值。

23、什么是野指针?
野指针是指向不可用内存的指针。任何指针变量在被创建时,不会自动成为NULL指针(空指针),其默认值是随机的,此时的指针就是野指针。
当指针调用free或delete释放后,未能将其设置为NULL,也会导致该指针变为野指针,此时虽然free或delete把指针所指的内存给释放掉了,但它们并没有把指针本身释放掉。
第三个造成野指针的原因是指针操作超越了变量的作用范围。

猜你喜欢

转载自blog.csdn.net/qq_38224589/article/details/81560161