C++中复杂声明
记录一下自己对复杂声明的理解,有一个基本原则:由(括号)内向(括号)外,由左至右。
目前遇到的基本都是指针、引用和数组这三个类型混杂在一起的情况,在最开始没了解规律的时候,很头大。了解的有两种情况,如下。
1、指向指针的引用
int i = 0;
int *p;
int *&r = p;//r为指针p的引用
上面代码的第三行中,由于没有括号,所以直接从右至左读即可,r的左边为&,所以r是一个引用,然后再接着往左读,看r是一个什么引用,int *,所以r是一个整型指针的应用。
2、复杂数组声明
int *i[10];//长度为10的指针数组
int (*j)[10];//指向长度为10的整型数组的指针
上面代码的第一行:由于没有括号,那么从右开始,[10],i是一个size为10的数组,这里就已经把i定性为一个数组了,然后往左读,int *,所以数组中的元素是整型指针,所以i是一个长度为10的整型指针数组。
上面代码的第二行:有括号,先读括号里的内容,j是一个指针,那么j定性为一个指针,然后在括号外面从右向左读,int[10],所以j是一个指向长度为10的整型数组的指针。
把指针换成引用也同理,如下。
//f为函数
f(int &i[10]);//长度为10的引用数组
f(int (&j)[10]);//指向长度为10的整型数组的引用