#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
int main()
{
int n = 2;
int m = 3;
// int i[2][3] = { {1, 2, 3}, {4, 5, 6} };
int * i = (int*)malloc(sizeof(int) * n * m); // i[n][m]
for(int j = 0; j < n * m; ++j) i[j] = j + 1;
for(int j = 0; j < n; ++j)
{
for(int k = 0; k < m; ++k)
printf("%d ", *(i + j * m + k));
printf("\n");
}
int (*ii)[m] = (int(*)[m]) i;
for(int j = 0; j < n; ++j)
{
for(int k = 0; k < m; ++k)
printf("%d ", ii[j][k]);
printf("\n");
}
ii = (int(*)[m]) i;
printf("i: 0x%p\n", i);
printf("ii: 0x%p\n", ii);
printf("sizeof(i): %" PRIuPTR "\n", sizeof(i));
printf("sizeof(*i): %" PRIuPTR "\n", sizeof(*i));
printf("sizeof(ii): %" PRIuPTR "\n", sizeof(ii));
printf("sizeof(*ii): %" PRIuPTR "\n", sizeof(*ii));
free(i);
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGludHR5cGVzLmg+CgppbnQgbWFpbigpCnsKCWludCBuID0gMjsKCWludCBtID0gMzsKLy8JaW50IGlbMl1bM10gPSB7IHsxLCAyLCAzfSwgezQsIDUsIDZ9IH07CglpbnQgKiBpID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpICogbiAqIG0pOwkvLyBpW25dW21dCglmb3IoaW50IGogPSAwOyBqIDwgbiAqIG07ICsraikgaVtqXSA9IGogKyAxOwoJZm9yKGludCBqID0gMDsgaiA8IG47ICsraikKCXsKCQlmb3IoaW50IGsgPSAwOyBrIDwgbTsgKytrKQoJCQlwcmludGYoIiVkICIsICooaSArIGogKiBtICsgaykpOwoJCXByaW50ZigiXG4iKTsKCX0KCglpbnQgKCppaSlbbV0gPSAoaW50KCopW21dKSBpOwoJZm9yKGludCBqID0gMDsgaiA8IG47ICsraikKCXsKCQlmb3IoaW50IGsgPSAwOyBrIDwgbTsgKytrKQoJCQlwcmludGYoIiVkICIsIGlpW2pdW2tdKTsgCgkJcHJpbnRmKCJcbiIpOwoJfQoJaWkgPSAoaW50KCopW21dKSBpOwoJcHJpbnRmKCJpOiAweCVwXG4iLCBpKTsKCXByaW50ZigiaWk6IDB4JXBcbiIsIGlpKTsKCXByaW50Zigic2l6ZW9mKGkpOiAlIiBQUkl1UFRSICJcbiIsIHNpemVvZihpKSk7CglwcmludGYoInNpemVvZigqaSk6ICUiIFBSSXVQVFIgIlxuIiwgc2l6ZW9mKCppKSk7CglwcmludGYoInNpemVvZihpaSk6ICUiIFBSSXVQVFIgIlxuIiwgc2l6ZW9mKGlpKSk7CglwcmludGYoInNpemVvZigqaWkpOiAlIiBQUkl1UFRSICJcbiIsIHNpemVvZigqaWkpKTsKCWZyZWUoaSk7Cn0=