C语言 为什么这段代码输出结果是9?求详细解释 谢谢

#include

void foo(int[][3]);

int main(void)

{

 int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

 foo(a);

 printf("%d\n", a[2][1]);

 return 0;

}

void foo(int b[][3])

{

  ++b;

  b[1][1] = 9;

}

传入的时候b指向a[0][0],而b是[][3]类型,++会作用在第一维,结果指向a[1][0]。
在a[1][0]的基础上偏移[1][1]就指向了a[2][1]。