#include <stdio.h>
int main(void) {
int ar[3][4] = {{2, 4, 6, 8},
{1, 3, 5, 7},
{10, 11, 12, 13}};
printf("========== Address and value ==========\n"); for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
printf("&ar[%d][%d] = %p, ar[%d][%d] = %d\n", i
, j
, &ar
[i
][j
], i
, j
, ar
[i
][j
]); }
}
printf("========== Q1 ==========\n"); printf("It's a 2D array pointer.\n\n");
printf("========== Q2 ==========\n"); printf("ar + 2 = %p\n", ar
+ 2); printf("It's a 2D array pointer.\n\n");
printf("========== Q3 ==========\n"); printf("*(ar + 2) = %p\n", *(ar
+ 2)); printf("It's a 1D array pointer.\n\n");
printf("========== Q4 ==========\n"); printf("*(ar + 2) + 3 = %p\n", *(ar
+ 2) + 3); printf("It's a 1D array pointer.\n\n");
printf("========== Q5 ==========\n"); printf("*(*(ar + 2) + 3) = %d\n", *(*(ar
+ 2) + 3)); printf("It's a integer value.\n\n");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbih2b2lkKSB7CiAgICBpbnQgYXJbM11bNF0gPSB7ezIsIDQsIDYsIDh9LAogICAgICAgICAgICAgICAgICAgIHsxLCAzLCA1LCA3fSwKICAgICAgICAgICAgICAgICAgICB7MTAsIDExLCAxMiwgMTN9fTsKCiAgICBwcmludGYoIj09PT09PT09PT0gQWRkcmVzcyBhbmQgdmFsdWUgPT09PT09PT09PVxuIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKSB7CiAgICAgICAgICAgIHByaW50ZigiJmFyWyVkXVslZF0gPSAlcCwgYXJbJWRdWyVkXSA9ICVkXG4iLCBpLCBqLCAmYXJbaV1bal0sIGksIGosIGFyW2ldW2pdKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgfQoKICAgIHByaW50ZigiPT09PT09PT09PSBRMSA9PT09PT09PT09XG4iKTsKICAgIHByaW50ZigiYXIgPSAlcFxuIiwgYXIpOwogICAgcHJpbnRmKCJJdCdzIGEgMkQgYXJyYXkgcG9pbnRlci5cblxuIik7CgogICAgcHJpbnRmKCI9PT09PT09PT09IFEyID09PT09PT09PT1cbiIpOwogICAgcHJpbnRmKCJhciArIDIgPSAlcFxuIiwgYXIgKyAyKTsKICAgIHByaW50ZigiSXQncyBhIDJEIGFycmF5IHBvaW50ZXIuXG5cbiIpOwoKICAgIHByaW50ZigiPT09PT09PT09PSBRMyA9PT09PT09PT09XG4iKTsKICAgIHByaW50ZigiKihhciArIDIpID0gJXBcbiIsICooYXIgKyAyKSk7CiAgICBwcmludGYoIkl0J3MgYSAxRCBhcnJheSBwb2ludGVyLlxuXG4iKTsKCiAgICBwcmludGYoIj09PT09PT09PT0gUTQgPT09PT09PT09PVxuIik7CiAgICBwcmludGYoIiooYXIgKyAyKSArIDMgPSAlcFxuIiwgKihhciArIDIpICsgMyk7CiAgICBwcmludGYoIkl0J3MgYSAxRCBhcnJheSBwb2ludGVyLlxuXG4iKTsKCiAgICBwcmludGYoIj09PT09PT09PT0gUTUgPT09PT09PT09PVxuIik7CiAgICBwcmludGYoIiooKihhciArIDIpICsgMykgPSAlZFxuIiwgKigqKGFyICsgMikgKyAzKSk7CiAgICBwcmludGYoIkl0J3MgYSBpbnRlZ2VyIHZhbHVlLlxuXG4iKTsKCiAgICByZXR1cm4gMDsKfQ==
========== Address and value ==========
&ar[0][0] = 0x7ffd8087e470, ar[0][0] = 2
&ar[0][1] = 0x7ffd8087e474, ar[0][1] = 4
&ar[0][2] = 0x7ffd8087e478, ar[0][2] = 6
&ar[0][3] = 0x7ffd8087e47c, ar[0][3] = 8
&ar[1][0] = 0x7ffd8087e480, ar[1][0] = 1
&ar[1][1] = 0x7ffd8087e484, ar[1][1] = 3
&ar[1][2] = 0x7ffd8087e488, ar[1][2] = 5
&ar[1][3] = 0x7ffd8087e48c, ar[1][3] = 7
&ar[2][0] = 0x7ffd8087e490, ar[2][0] = 10
&ar[2][1] = 0x7ffd8087e494, ar[2][1] = 11
&ar[2][2] = 0x7ffd8087e498, ar[2][2] = 12
&ar[2][3] = 0x7ffd8087e49c, ar[2][3] = 13
========== Q1 ==========
ar = 0x7ffd8087e470
It's a 2D array pointer.
========== Q2 ==========
ar + 2 = 0x7ffd8087e490
It's a 2D array pointer.
========== Q3 ==========
*(ar + 2) = 0x7ffd8087e490
It's a 1D array pointer.
========== Q4 ==========
*(ar + 2) + 3 = 0x7ffd8087e49c
It's a 1D array pointer.
========== Q5 ==========
*(*(ar + 2) + 3) = 13
It's a integer value.