在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C/ 這個如此奇葩的二維數(shù)組怎么理解??

這個如此奇葩的二維數(shù)組怎么理解??

參考文章---c/c++中二維數(shù)組和指針關(guān)系分析

其中有下面一個例子(二維數(shù)組一維化):

int arr[2][3] = {1 , 2 , 3 , 4 , 5 , 6};
int *p = arr[0];

// 下標(biāo)方式訪問
printf("arr[%d] = %d\n" , 1 , p[1]);     // arr[1] = 2
// 指針方式訪問
printf("arr[%d] = %d\n" , 1 , *(p + 1)); // arr[1] = 2
  1. 為什么這邊編譯器會允許 int[2][3] = {1 , 2 , 3 ...} 這種定義數(shù)組的方式呢??
  2. 為什么指針可以直接通過下標(biāo)的方式訪問指針 p,獲取數(shù)組的元素值??
回答
編輯回答
空痕
  1. c的標(biāo)準(zhǔn)允許這種做法. 至于為什么呢? 很簡單, c充分信任程序員不會寫出這樣丑陋的代碼. 雖然gcc和clang都會有warning的...
  2. c里面*(p+1), *(1+p), p[1], 1[p]都等價, 所以甚至你可以寫成1[p], 給你舉個例子:
#include <stdio.h>
int main()
{
    int arr[2][3] = {1 , 2 , 3 , 4 , 5 , 6};
    int *p = &arr[0][0];
    // 下標(biāo)方式訪問
    for (int i = 0; i < 6; i++)
    {
        printf("arr[%d] = %d\n" , 1 , i[p]);
    }
}
arr[1] = 1
arr[1] = 2
arr[1] = 3
arr[1] = 4
arr[1] = 5
arr[1] = 6
2017年8月6日 14:34