• 指针数组和数组指针


    指针数组:

    定义变量:  类型  *变量名[len] 

    含义: 存放len个地址的一维数组

    1、一维数据的“另一种写法“:

    1 ...
    2 
    3 int i1=1,i2=2;
    4 int *p[2];
    5 p[0]=&i1,p[1]=&i2;
    6 cout<<p[0]<<" "<<p[1]<<endl;
    7 cout<<p[0][0]<<" "<<p[1][0]<<endl;
    8 
    9 ...
    View Code

    2、二维数组情况:

     1 ...
     2 
     3 int b[3][3]={{2,3,4},{8,8,8},{4,5,6}};
     4 int *pb[3];
     5 for(int i=0; i<3; i++)
     6     pb[i] = b[i];//p[i]存放第i行的地址
     7 for(int i=0; i<3; i++) 
     8 {
     9     for(int j=0; j<3; j++)
    10         cout<<pb[i][j]<<'	';
    11     cout<<endl;
    12 }
    13 
    14 ...
    View Code

    注意:数组是引用类型,赋值时直指堆内存的存储空间

    数组指针:

    定义:  类型 (*变量名)[len]

    含义: 二维数组的引用类型,笔者这样理解

    1、一维情况:

     1 ...
     2 
     3 int a[3]={2,3,3};
     4 int (*p)[3];//p++,步长3*sizeof(int),相当于走过了长度为3的一行 
     5 p = &a;
     6 for(int i=0; i<3; i++)
     7     cout<<a+i<<'	';
     8     cout<<endl;
     9 for(int i=0; i<3; i++)
    10     cout<<*p+i<<'	';//p是二级地址,*p+i为一级地址
    11     cout<<endl;
    12 
    13 ...
    View Code

    2、二维情况:

     1 ...
     2 
     3 int a[4][2] = {2,3,3,2,3,3,2,2};
     4 int (*pa)[2];//列一致 
     5 pa = a;//指向二维数组时, 
     6 for(int i=0; i<4; i++)
     7 {
     8     for(int j=0; j<2; j++)
     9         cout<<pa[i][j]<<'	';
    10     cout<<endl;
    11 }
    12 
    13 ...
    View Code

    实例:函数传参

     1 ...
     2 
     3 void fun(int (*pa)[3])
     4 {
     5     //典型的函数声明,同理fun(int pa[][2]) 
     6     //...
     7  }
     8 int main()
     9 {
    10     int a[2][3]={1,2,3,6,7,8};
    11     fun(a);
    12     //...
    13  } 
    14 
    15 ...
    View Code
  • 相关阅读:
    微信群之Java技术红包问答
    Java JPA 查询实体部分字段
    我的iphone6退货之路
    Simulated Annealing (模拟退火)
    ICML 2017 Reading (1): Combining Online and Offline Knowledge in UCT
    ICML 2017 Reading
    NIPS 2014
    Gumbel-Max trick, Perturb and MAP and more
    ICML 2014
    非常有趣的JavaScript游戏
  • 原文地址:https://www.cnblogs.com/guoyujiang/p/11804212.html
Copyright © 2020-2023  润新知