fork download
  1.  
  2. #include <stdio.h>
  3. #include <stdint.h>
  4.  
  5. int a[][3] = {
  6. {10, 20, 30},
  7. {40, 50, 60},
  8. {70, 80, 90}
  9. };
  10.  
  11. int main(void)
  12. {
  13. int *p[] = {a[0], a[1], a[2]};
  14. int (*q)[3] = a;
  15.  
  16. // 仮想アドレス
  17. uintptr_t addr_a = 0x1000;
  18. uintptr_t addr_p = 0x2000;
  19. uintptr_t addr_q = 0x3000;
  20.  
  21. printf("sizeof(int) = %zu\n", sizeof(int));
  22. printf("sizeof(int *) = %zu\n", sizeof(int *));
  23. printf("sizeof(int (*)[3]) = %zu\n", sizeof(int (*)[3]));
  24. printf("sizeof a = %zu\n", sizeof a);
  25. printf("sizeof p = %zu\n", sizeof p);
  26. printf("sizeof q = %zu\n", sizeof q);
  27.  
  28. printf("&a = 0x%lx\n", (unsigned long)addr_a);
  29. printf("&p = 0x%lx\n", (unsigned long)addr_p);
  30. printf("&q = 0x%lx\n", (unsigned long)addr_q);
  31.  
  32. printf("**a = %d\n", **a);
  33. printf("a[1][1] = %d\n", a[1][1]);
  34. printf("*a[1] = %d\n", *a[1]);
  35. printf("(*a + 1)[1] = %d\n", (*a + 1)[1]);
  36. printf("*(a + 1)[1] = %d\n", *(a + 1)[1]);
  37.  
  38. printf("**p = %d\n", **p);
  39. printf("p[1][1] = %d\n", p[1][1]);
  40. printf("*p[1] = %d\n", *p[1]);
  41. printf("(*p + 1)[1] = %d\n", (*p + 1)[1]);
  42. printf("*(p + 1)[1] = %d\n", *(p + 1)[1]);
  43.  
  44. printf("**q = %d\n", **q);
  45. printf("q[1][1] = %d\n", q[1][1]);
  46. printf("*q[1] = %d\n", *q[1]);
  47. printf("(*q + 1)[1] = %d\n", (*q + 1)[1]);
  48. printf("*(q + 1)[1] = %d\n", *(q + 1)[1]);
  49.  
  50. return 0;
  51. }
Success #stdin #stdout 0s 5328KB
stdin
Standard input is empty
stdout
sizeof(int) = 4
sizeof(int *) = 8
sizeof(int (*)[3]) = 8
sizeof a = 36
sizeof p = 24
sizeof q = 8
&a = 0x1000
&p = 0x2000
&q = 0x3000
**a = 10
a[1][1] = 50
*a[1] = 40
(*a + 1)[1] = 30
*(a + 1)[1] = 70
**p = 10
p[1][1] = 50
*p[1] = 40
(*p + 1)[1] = 30
*(p + 1)[1] = 70
**q = 10
q[1][1] = 50
*q[1] = 40
(*q + 1)[1] = 30
*(q + 1)[1] = 70