数组与指针 笔记

// 测试多维数组与指针

# include <stdio.h>
int main(void)
{
 int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
 printf("a = %d, &a[0] = %d, &a[0][0] = %d, *a = %d, **a = %d
", a, &a[0], &a[0][0], *a, **a);
 printf("a[0] = %d, a[0][0] = %d
", a[0], a[0][0]);
 int b[2][2][2] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
 printf("b = %d, &b[0] = %d, &b[0][0] = %d, &b[0][0][0] = %d
", b, &b[0], &b[0][0], &b[0][0][0]);
 printf("*b = %d, **b = %d, ***b = %d, b[0] = %d, b[0][0] = %d, b[0][0][0] = %d
", *b, **b, ***b, b[0], b[0][0], b[0][0][0]);
 
 return 0;
} 


 
/*
    运行结果:
     a = 6487584, &a[0] = 6487584, &a[0][0] = 6487584, *a = 6487584, **a = 1
  a[0] = 6487584, a[0][0] = 1
  b = 6487552, &b[0] = 6487552, &b[0][0] = 6487552, &b[0][0][0] = 6487552
  *b = 6487552, **b = 6487552, ***b = 1, b[0] = 6487552, b[0][0] = 6487552, b[0][0][0] = 1
  
  --------------------------------
  Process exited after 0.01666 seconds with return value 0
  请按任意键继续. . .
 结论:
     以二维数组为例
  二维数组的起始元素为 a[0][0],它的地址可以表示为&a[0], &a[0][0], a[0], a, *a
  基于以上例子,表达式 &a[0], &a[0][0], a[0], a, *a 的值都相等。
  说明:
      虽然它们的值相同,但 a 表示第 0 行的地址,而 *a 和 &a[0][0] 表示数组元素 a[0][0]
      的地址。(a)前者为行地址,(*a)后者表示列地址。
   行地址与列地址的区分:
       例如 a 位数组第一行的地址, *a 表示数组第一行第 0 列的地址 **a 表示数组第一行
    第 0 列的值(a[0][0]). 可得出结论,行地址做 * 运算后得到列地址,列地址做 * 运
    算后得到数组元素。
*/

原文地址:https://www.cnblogs.com/lnlin/p/6633985.html