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。

除此之外,都很自然。

作者观点

今天说明的与其说是新内容,还不如说是之前内容的一个综合练习。

举报
评论 0