指针和数组的千丝万缕(一)

#include <stdio.h>

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;
}

gdb之后:

++b的步长实际上是3个int,也就是++b运算以后,b指向{4,5,6}这个数组的开始,而b[1]就是{7,8,9}, b[1][1]实际上就是8这个值也就是main函数中的a[2][1].

In foo, b has type pointer to array[3] ofint, and after the increment, itpoints to the array a[1] ({4, 5, 6}).  So b[1] has type array[3] of int, and it denotes the arraya[2] ({7, 8, 9}).  In value context,b[1] “decays” into a pointer toa[2][0] (7), so b[1][1] denotesa[2][1], whose value is changed from 8 to 9.


原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007645.html