如何在以下输出?

时间:2017-03-05 05:23:10

标签: c pointers multidimensional-array

'#include <stdio.h>
int main() 
{ 
    short arr[3][2]={3, 6, 9, 12, 15, 18}; 
    printf("%d  %d", *(arr + 1)[1], **(arr + 2)); 
}'

该程序的输出是15,15?

2 个答案:

答案 0 :(得分:0)

根据运算符优先级规则*(a+i)[j]将被解析为*((a + i)[j]),最终等同于*( *(a + i + j) )。因此,对于i = 1j = 1,它将是*( *(a + 1 + 1) ) = *( *( a + 2) + 0) = a[2][0]

答案 1 :(得分:-2)

在给出的图像中,它有一个3*2矩阵,即3行和2行。

*(arr+1)[1]可以这样解释:

arr+1给出第2行第1个元素的地址。

(arr+1)[1]给出第3行第1个元素的地址。

*(arr+1)[1]给出此地址的值

以下是示例:

void main(){
  short arr[3][2]={3,6,9,12,15,18};
  printf("%d %d %d %d", (arr ),(arr+1),(arr+1)[1],(arr +2));
}

输出:

-977229152 -977229148 -977229144 -977229144