• 二维数组的行地址、列地址,与元素的存储


    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 : ");
    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(" ");
    27.  
      }
    28.  
      printf("array b is : ");
    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 ",*p1,p1);
    34.  
      printf("p2=a+1指向的值是:%d;地址是:%d ",*p2,p2);
    35.  
      printf("p3=a[0]指向的值是:%d;地址是:%d ",*p3,p3);
    36.  
      printf("p4=a[1]指向的值是:%d;地址是:%d ",*p4,p4);
    37.  
      p5=a[0]+1;//指向第一行,第二列元素的地址;
    38.  
      p6=a[1]+1;//指向第二行,第一列元素的地址;
    39.  
      printf("p5=a[0]+1指向的值是:%d;地址是:%d ",*p5,p5);
    40.  
      printf("p6=a[1]+1指向的值是:%d;地址是:%d ",*p6,p6);
    41.  
      printf("*(a+1)指向的地址是:%d ",*(a+1));
    42.  
      printf("*(*(a+1))指向的值是:%d ",*(*(a+1)));
    43.  
      printf("*(a+1)+2指向的地址是:%d ",(*(a+1)+2));
    44.  
      printf("*(a+1)+2指向的值是:%d ",*(*(a+1)+2));
    45.  
      printf("*a+2指向的值是:%d;地址是:%d ",*(*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,都表示指针

    注意防止越界!

  • 相关阅读:
    Format用法总汇
    packed record与record区别
    将实数取整函数
    取鼠标所在位置对应的窗口句柄
    Delphi中优秀的字符串分割函数
    Jscript中的FSO对象模式
    关于.NET开发中遇到的一个验证视图状态Mac失败的解决方法随笔
    如何延长电脑硬盘的使用寿命
    如何避免U盘中毒
    如何优化Windows XP系统来加快网速
  • 原文地址:https://www.cnblogs.com/lidabo/p/14163159.html
Copyright © 2020-2023  润新知