C++基础编程----3.2多维数组

多维数组

1.指针和多维数组

             1.由多维数组名转换得来的指针实际上是指向第一个内层数组的指针
                       int   ia[3][4];
                       int   (*p)[4]=ia;            //   p指向含有4个整数的数组
           2.      int   a[5];          a和&a  &a[0]地址一样   但是类型不同    a和&a[0]是int*    而&a是int (*p)[5]类型
                    int  a[3][4];      &a为二维数组的地址,类似于int(*p)[3][4]  ++p未定义                        a和&a[0]地址一样,都是第一维的首地址,类似于int (*p)[4]=a;     ++p和&a[1]相等
                                                 &a[0][0]   第一维第一个位置的地址   类似于int *p      ++p和&a[0][1]相等;
           3.       int  ia[3][4];
                     int   (&row)[4]=ia[1];                     //   把row绑定到ia的第二个4元素的数组中  也就是第二行

2.使用范围for语句处理多维数组

            1.  size_t   cnt = 0;
                  int  ia[3][4];
                  for(auto &row:ia)                  //   遍历ia中所有的元素   这些元素是大小为4的数组
                       for(auto &col:row)           //   遍历大小为4数组中某一个  col为整数的引用
                       {
                               col=cnt;
                               ++cnt;
                       }
                 
                  for(auto row:ia)                  //     ia数组  编译器自动转换为指针类型,row类型为int *
                       for(auto col:row)           //     编译器试图在int *遍历,这与程序相差甚远   错误  
                
                   注意:使用范围for循环语句处理多维数组,除了最内层外,其他所有的控制循环变量都应该是引用类型。
           2.     int  ia[3][4]={1,1,12,34};
                   //  p指向ia的第一个数组(含有四个整数元素数组的地址)
                   for(auto p=begin(ia);p!=end(ia);++p)       //  p的类型为int (*p)[4]
                        for(auto q=begin(*p);q!=end(*p);++q)      //   q的类型为int *
                                  cout<<*q<<endl; 
        



你可能感兴趣的:(范围for循环,二维数组各地址区别)