C++11新特性(12)-使用auto表示多维数组相关指针
混乱的多维数组指针
多维数组实际上是数组的数组。这个含义很好理解,但是在定义操作数组数据的指针时却有点麻烦。观察下面的二维数组。
int matrix[10][10];
先来回回答一个问题:定义指向二维数组的一行的指针时,下面那种方式是对的呢?
int *row[10];
int (*row)[10];
答案是第二种。这里有一种简单的判断方法,首先将星号的位置稍作调整:
int* row[10];
int (*row)[10];
第一种情况是指针的数组,剩下的就是数组的指针了。
使用auto表示多维数组相关的指针
C++11提供了auto描述符,也提供了begin/end函数。利用这些新特征,定义多维数组指针时就会容易一些:
int matrix[10][10];
int number=1;
for(auto row = begin(matrix); row != end(matrix); ++row)
{
for(auto data = begin(*row); data != end(*row); ++data){
*data = number++;
}
因为row是数组指针,而begin和end的要求的是引用类型,所以在调用begin和end函数取得数据指针时使用的参数是*row,而不是row。
除此之外,都很自然。
作者观点
今天说明的与其说是新内容,还不如说是之前内容的一个综合练习。
请先 后发表评论~