码迷,mamicode.com
首页 > 编程语言 > 详细

C语言数组寻址

时间:2019-06-11 11:16:11      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:type   一个   printf   三维   初始化列表   赋值初始化   大小   内存   code   

C语言数组

  1. 数组的定义
    数组是用来存放数据类型相同且逻辑意义相同的数据
  2. 数组的大小
    数组的大小不能是变量,必须是常量或者常量表达式,常量表达式由编译器编译时自动求值。
    也可以不指定数组大小,但必须对数组进行初始化,编译器在编译时会根据初始化列表中元
    素的个数计算数组大小,例如:

    int nAry[]={1,3,4};
  3. 数组的初始化
    在定义数组时可以使用初始化列表进行初始化,例如:

     int nAry[3]={0,3,3};

    但是只能在定义时使用这种方式赋值,在其他地方只能进行单个元素赋值.
    如果数组的数据类型是基本数据类型,如果在初始化列表中只对前面几个
    元素进行初始化,后面没有进行赋值初始化,那么剩下的元素将被初始化
    为0,例:
    技术图片

  4. 关于数组名
    • 数组名是数组的首地址,它是一个常量,所以不可以对数组名使用自增或者自减运算符
    • 对数组名使用sizeof运算符,可以获取到数组所占用的字节数,但是如果数组名做为参
      数传递给函数,在函数内部对这个数组参数使用sizeof,求得的只是这个指针参数的大
      小,并不是数组大小. 例:
      技术图片
  5. 数组寻址:
    • 一维数组寻址
      设有一维数组Type Arry[N],其中Type表示数组中元素的类型,Arry表示数组名,
      N表示元素个数,那么数组中第n个元素的内存地址为:(int)Arry+n*sizeof(Type)
      例:
      技术图片

    • 二维数组寻址
      设有二维数组Type Arry[M][N],那么数组中第Arry[m][n]个元素的内存地址为:
      (int)Arry+sizeof(Arry[0])m+sizeof(Type)n
      例:

       int nAry[10][3];
      
       for (int iIndex = 0; iIndex < 10; iIndex++)
       {
         for (int jIndex = 0; jIndex < 3; jIndex++)
         {
           printf("nAry[%d][%d]地址:%08X\t", iIndex, jIndex,&nAry[iIndex][jIndex]);
           printf("手工计算nAry[%d[%d]地址:%08X\r\n", iIndex, jIndex, (int)nAry + sizeof(nAry[0])*iIndex+sizeof(int)*jIndex);
         }
       }

      运行结果:
      技术图片

    • 三维数组寻址
      设数组Type Arry[M][N][P],那么数组中第Arry[m][n][p]个元素的内存地址为:
      (int)Arry + sizeof(Arry[0])M + sizeof(Type)(n*P+p);
      例:

        int nAry1[3][4][5];
      
        for (int iIndex = 0; iIndex < 3; iIndex++)
        {
          for (int jIndex = 0; jIndex < 4; jIndex++)
          {
            for (int mIndex = 0; mIndex < 5; mIndex++)
            {
              printf("nAry[%d][%d][%d]地址:%08X\t", iIndex,
                jIndex, mIndex,
                &nAry1[iIndex][jIndex][mIndex]);
              printf("手工计算nAry[%d][%d][%d]地址:%08X\r\n",
                iIndex, jIndex, mIndex, 
                (int)nAry1 + sizeof(nAry1[0])*iIndex + sizeof(int)*(jIndex * 5 + mIndex));
            }
          }
        }
      
      运行结果:
      技术图片
    • 任意多维数组寻址
      设多维数组Type Arry[M][N][O].....[Y][Z],那么该数组中任意一个数组元素
      Arry[m][n]....[y][z]的内存地址为:
      (int)Arry + sizeof(Arry[0])*m + sizeof(Type)*(n*O+..+y*Z+z)

C语言数组寻址

标签:type   一个   printf   三维   初始化列表   赋值初始化   大小   内存   code   

原文地址:https://www.cnblogs.com/UnknowCodeMaker/p/11001978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!