二维数组的指针

原创 2016年08月29日 12:50:41
int main(){
int aa[4][5]={ {1,2,3,4,5}, {6,7,8,9,0}, {11,12,13,14,15}, {16,17,18,19,20} };
int (*p)[5]=aa;  //或者
       cout<<*(*p+1)<<endl;
cout<<*(*(p+3)+1)<<endl;    
}

会打印2和17.
为啥

记住一个万能公式就行了:
*(p + i) = p[i]

int a[2][3]={{1,2,3},{4,5,6}} **p; p=a; 

则 *(*(p+1)+2)=p[1][2]

 

指针(的)数组:array of pointers,数组元素都是指针    int* a[5] 

数组(的)指针:a pointer to an array,即指向数组的指针  int (*a)[5]

对于一个普通的一位数组来说,int c[4]={1,2,3,4}; 定义一个 int (*a)[4] 表示*a是一个指针,它指向一个大小为4的数组。


所以,对于二维数组来说,我们这里定义了一个数组的指针   int (*p)[5]=aa;

表示*p是一个指针,它指向一个大小为5的数组。也就是说,*p是个指针,代表每一行的地址。*(p+1)代表指向下一行的地址。


总结起来,(*(*p))的两个*,靠近p 的取址符是行指针,远离的是列

对比给二维数组赋值的时候类似如下:

先行再列

size_t cnt = 0;

for (auto &row : ia)            // 对于外层数组的每一个元素

    for (auto &col : row) {     // 对于内层数组的每一个元素

        col = cnt;              // 将下一个值赋给该元素

        ++cnt;                  // 将 cnt加1

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】

【1】结构体中含有内置数据类型的一维数组 C++代码: typedef struct _testStru3 { int iValArrp[30]; WCHAR szChArr[30]; }t...

实例分析用指针访问二维数组的几种方法

(2012-02-18 21:48) 分类: Array 之前对数组的概念一直没有理解透彻,只觉得数组名就是个常量指针而已,用法和基本的指针差不多。所以当我尝试用二级指针去访问...

二维数组指针的使用

# include int main(void) { int a[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11...

二维数组与二级指针

今日在论坛上看到有人问到指针的问题,我想通过这样的例子来阐述几个常见的错误,并加深对二  级指针和二维数组之间关系的理解.  我们知道char array[]=”abcdef”; array是数组的首...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)