C++易混变量类型
1. 指针引用和引用指针
1 | int i= 42; |
要理解r的类型到底是什么,最简单的办法是从右向左阅读r的定义。离变量名最近的符号(此例中是&r的符号&)对变量的类型有最直接的影响,因此r是一个引用。声明符的其余部分用以确定r引用的类型是什么,此例中的符号*说明r引用的是一个指针。最后,声明的基本数据类型部分指出r引用的是一个int指针。
r是对int指针p的引用
2. 数组指针和指针数组
1 | int* a[4]; //注意:[]优先级比较高,没有小括号时,a优先和[]结合,其次是*; |
类似上面第一个,两个变量同样从右向左阅读定义:
- a附近没有(),它首先和[4]结合,指明a是一个容量是4的数组。然后左侧修饰符*号说明这个数组中元素的变量类型是指针,也就是说它是一个指针数组,最终这些指针的数据类型由int指明。所以,a是一个int类型的指针数组;
- 由于有优先级更高的()的存在,b首先结合变成 (*b),这说明b是一个指针。其次右侧[4]说明该指针指向有4个元素的数组,这四个元素的类型由int表明。所以,b是指向存储着4个int类型元素的数组。
3. 指向函数的指针(函数指针)和返回指针的函数
每个函数都占用一段内存单元,他们有一个其实地址。指向函数入口地址的指针被称为函数指针。
一般形式:返回的数据类型 (*指针变量名)(形式参数表);
例如: int (*p) (int);
int (*p) (int); //指向函数的指针,也即函数指针
int* p (int); //返回指针类型的函数
int* processNum(int i, int j, int (*p) (int, int) ); //一个接收函数指针,并返回整型指针的函数
- const和指针、const和引用
详见《修饰符const总结》