数组中常见的计算问题

 

数组名本身就是地址

#一维数组:

int array[4] = {0};


printf ("%p\n", &array[0]);            // 数组首无素地址, 单位是 4 字节

printf("%p\n", array);                //array是数组名, 同时也是数组首元素地址, 单位是 4 字节

printf ("%p\n", &array);              //数组的地址, 单位是一个数组, 20 字节

#二维数组

int a[3][4]={0};


printf("%p\n", &a[0][0]);                 //首元素的地址, 单位 4 字节

printf("%p\n", a[0]);                     //首行首元素的地址, 单位 4 字节

printf("%p\n", &a[0]);                    //首行的地址, 单位 12 字节

printf("%p\n", a);                        //首行的地址, 单位 12 字节
 
printf("%p\n", &a);                       //数组的地址, 单位 48 字节
printf("%p %p\n", a[1], *(a + 1));                      // a[x]===== *(a + x)

数组a[3][4] 哪个不能表示a[1][1]?

*(a[1] + 1)           √        // a[1]是第二行首元素的地址, +1是第二行第二个元素的地址
 
*(&a[1][1])           √        // &a[1][1]是第二行第二个元素的地址, * 取值
 
(*(a + 1))[1]         √        // *[a + 1] = a[1]

*(a + 5)              ×        // a是首行的地址, a + 1 超出范围

*(*a + 5)             √        // *a是首行首元素的地址, +5是第二行第二个地址, * 取值

猜你喜欢

转载自blog.csdn.net/qq_42200183/article/details/81226409
今日推荐