DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、连续存储

2、二维数组的行地址与列地址

1)行地址

1、二维数组中,数组名a的值,是数组a首元素a[0][0]的地址,即&a[0][0],第一行第一个元素的地址;

2、二维数组中,数组名a+1是数组a的元素a[1][0]的地址,即&a[1][0],第二行第一个元素的地址;

2)列地址

1、二维数组中,a[0]的值,即该数组的首元素a[0][0]的地址,即&a[0][0];

2、二维数组中,a[0]+1的值,是数组元素a[0][1]的值,即&a[0][1];

3)混合一下

1、二维数组中,“a[0]+1”是指向数组元素a[0][1]的地址,“a[1]+2”是指向数组元素a[1][2]的地址;

2、同样的,二维数组中,“*(a+1)+2”是指向数组元素a[1][2]的地址,与“a[1]+2”相等;

注:

*(a+1)表示第2行的行地址;

*a+1表示第一行第二个元素的地址;

3、二维数组中,*(*(a+1)+2))是数组元素a[1][2]的!!!


 

  1.  
    /*
  2.  
    *copyright(c) 2018,HH
  3.  
    *All rights reserved.
  4.  
    *作 者:HH
  5.  
    *完成日期:2018年7月25日
  6.  
    *版本号:v1.0
  7.  
    *
  8.  
    *问题描:二维数组,元素地址的表示,行列地址的表示;
  9.  
    *输入描述:;
  10.  
    *程序输出:
  11.  
    */
  12.  
     
  13.  
    #include <stdio.h>
  14.  
    int main()
  15.  
    {
  16.  
    int a[2][3]={{1,2,3},{4,5,6}};
  17.  
    int i,j;
  18.  
    int *p1,*p2,*p3,*p4,*p5,*p6;
  19.  
    printf("array a is :\n");
  20.  
    for(i=0;i<2;i++)
  21.  
    {
  22.  
    for(j=0;j<3;j++)
  23.  
    {
  24.  
    printf("%d ",a[i][j]);
  25.  
    }
  26.  
    printf("\n");
  27.  
    }
  28.  
    printf("array b is :\n");
  29.  
    p1=a;//二维数组的数组名,即首元素a[0][0]的首地址;
  30.  
    p2=a+1;//a+1是数组a的元素a[1][0]的地址,即&a[1][0]
  31.  
    p3=a[0];//同a[0][0]的地址,即第一行第一个元素的地址
  32.  
    p4=a[1];//同a[1][0]的地址,即第二行第一个元素的地址
  33.  
    printf("p1=a指向的值是:%d;地址是:%d\n",*p1,p1);
  34.  
    printf("p2=a+1指向的值是:%d;地址是:%d\n",*p2,p2);
  35.  
    printf("p3=a[0]指向的值是:%d;地址是:%d\n",*p3,p3);
  36.  
    printf("p4=a[1]指向的值是:%d;地址是:%d\n",*p4,p4);
  37.  
    p5=a[0]+1;//指向第一行,第二列元素的地址;
  38.  
    p6=a[1]+1;//指向第二行,第一列元素的地址;
  39.  
    printf("p5=a[0]+1指向的值是:%d;地址是:%d\n",*p5,p5);
  40.  
    printf("p6=a[1]+1指向的值是:%d;地址是:%d\n",*p6,p6);
  41.  
    printf("*(a+1)指向的地址是:%d\n",*(a+1));
  42.  
    printf("*(*(a+1))指向的值是:%d\n",*(*(a+1)));
  43.  
    printf("*(a+1)+2指向的地址是:%d\n",(*(a+1)+2));
  44.  
    printf("*(a+1)+2指向的值是:%d\n",*(*(a+1)+2));
  45.  
    printf("*a+2指向的值是:%d;地址是:%d\n",*(*a+2),*a+2);
  46.  
    return 0;
  47.  
    }

 

3)行地址,列地址的等价写法

注:在二维数组a[i][j]中,a[i]是“行名”,等价于指针;

a[0]等价于a,都表示指针;

a[1]等价于a+1,都表示指针;

a[1]+1等价于*(a+1)+1,都表示指针

注意防止越界!

 

posted on 2020-12-20 12:27  DoubleLi  阅读(2958)  评论(0编辑  收藏  举报