C語言數組尋址


C語言數組

  1. 數組的定義
    數組是用來存放數據類型相同且邏輯意義相同的數據

  2. 數組的大小
    數組的大小不能是變量,必須是常量或者常量表達式,常量表達式由編譯器編譯時自動求值。
    也可以不指定數組大小,但必須對數組進行初始化,編譯器在編譯時會根據初始化列表中元
    素的個數計算數組大小,例如:

    int nAry[]={1,3,4};
    
  3. 數組的初始化
    在定義數組時可以使用初始化列表進行初始化,例如:

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

    但是只能在定義時使用這種方式賦值,在其他地方只能進行單個元素賦值.
    如果數組的數據類型是基本數據類型,如果在初始化列表中只對前面幾個
    元素進行初始化,后面沒有進行賦值初始化,那么剩下的元素將被初始化
    為0,例:
    數組初始化.png

  4. 關於數組名

    • 數組名是數組的首地址,它是一個常量,所以不可以對數組名使用自增或者自減運算符
    • 對數組名使用sizeof運算符,可以獲取到數組所占用的字節數,但是如果數組名做為參
      數傳遞給函數,在函數內部對這個數組參數使用sizeof,求得的只是這個指針參數的大
      小,並不是數組大小. 例:
      sizeof數組大小.png
  5. 數組尋址:

    • 一維數組尋址
      設有一維數組Type Arry[N],其中Type表示數組中元素的類型,Arry表示數組名,
      N表示元素個數,那么數組中第n個元素的內存地址為:(int)Arry+n*sizeof(Type)
      例:
      一維數組尋址.png

    • 二維數組尋址
      設有二維數組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);
         }
       }
      

      運行結果:
      二維數組尋址.png

    • 三維數組尋址
      設數組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));
            }
          }
        }
      
      

      運行結果:
      三維數組尋址.png

    • 任意多維數組尋址
      設多維數組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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM