打印二维数组元素地址与值

本程序使用C语言演示如何访问和打印二维数组中元素的地址和值。

#define FORMAT "%p,%d " // 使用%p打印地址

int main() {
    int a[3][4] = {
        {1, 3, 5, 7}, 
        {9, 11, 13, 15}, 
        {17, 19, 21, 23}
    };

    // 打印数组名、首地址及首元素值
    printf(FORMAT, a, *a); 
    printf(FORMAT, a[0], *(a + 0)); 
    printf(FORMAT, &a[0], &a[0]); 

    // 打印第二行首地址及首元素值
    printf(FORMAT, a[1], a + 1); 
    printf(FORMAT, &a[1][0], *(a + 1) + 0); 

    // 打印第三行首地址及首元素值
    printf(FORMAT, a[2], *(a + 2)); 
    printf(FORMAT, &a[2], a + 2); 

    // 打印第二行首元素地址及值
    printf(FORMAT, &a[1][0], *(*(a + 1) + 0)); 

    return 0; // 添加return语句
}

运行结果示例: (假设系统给数组 a 分配的首地址为 0x7ffe00 )

0x7ffe00,1 0x7ffe00,1 0x7ffe00,0x7ffe00 0x7ffe10,9 0x7ffe10,9 0x7ffe20,17 0x7ffe20,17 0x7ffe10,9

结果分析:

  • 数组名 a 代表数组首地址,与 a[0]&a[0] 相同。
  • a + i 表示第 i 行首地址。
  • *(a + i) + j 表示第 i 行第 j 列元素地址。
  • *(*(a + i) + j) 表示第 i 行第 j 列元素值。

注意: 程序中使用了 %p 格式化输出地址,实际地址值可能因系统和编译器而异。