二維數(shù)組與指針的一些問題

學(xué)號:19021211263

#include<stdio.h>

int main()
{
    int A[2][3] = {
                        {1,2,3},
                        {4,5,6}
                    };
    printf("=========================\n");
    printf("A[0][1]:%d\n",A[0][1]);
    printf("*(*(A+0)+1):%d\n",*(*(A+0)+1));
    printf("=========================\n");
    printf("&A[1][0]:%d\n",&A[1][0]);
    printf("*(A+1):%d\n",*(A+1));
    printf("=========================\n");
    printf("**(A+1):%d\n",**(A+1));
    printf("**((int (*)[1])A+1):%d\n",**((int (*)[1])A+1));
    return 0;
}

結(jié)果:

=========================
A[0][1]:2
*(*(A+0)+1):2
=========================
&A[1][0]:6487612
*(A+1):6487612
=========================
**(A+1):4
**((int (*)[1])A+1):2

分析:

  1. A[0][1]:常規(guī)的二維數(shù)組索引
  2. *(*(A+0)+1)):利用雙重指針來對二維數(shù)組進(jìn)行索引,這里的A應(yīng)該是一個int ()[3]數(shù)組指針類型的變量,*(A+0)就是一個*int ***類型的變量,所以這里和A[0][1]的結(jié)果是一樣的。
  3. &A[1][0]:第二行第一列數(shù)據(jù)的地址
  4. *(A+1):同第二點(diǎn),這里A是一個int ()[3]數(shù)組指針類型的變量,故A+1指向第二,且A+1仍是一個int ()[3]**數(shù)組指針類型的變量,取地址后就是第二行行首的地址
  5. **(A+1):同理,A是一個int ()[3]數(shù)組指針類型的變量,A+1指向第二*,兩次取地址后就是元素A[1][0]
  6. **((int (*)[1])A+1)):這里利用強(qiáng)制類型轉(zhuǎn)化將A的類型由int ()[3]數(shù)組指針類型轉(zhuǎn)化為int ()[1],故A+1指向第二,且A+1仍是一個int ()[1]*數(shù)組指針類型的變量,兩次取地址后就是元素A[0][1]

更多有趣內(nèi)容歡迎訪問我的個人博客。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容