fork download
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int a[] = {10, 20, 30, 40, 50};
  6. int *p = a;
  7. int (*q)[5] = &a;
  8.  
  9. printf("sizeof(int) = %zu\n", sizeof(int)); // 4
  10. printf("sizeof p = %zu\n", sizeof p); // 8
  11. printf("sizeof q = %zu\n", sizeof q); // 8
  12. printf("&a = %p\n", (void *)&a); // 0x1000
  13. printf("&p = %p\n", (void *)&p); // 0x2000
  14. printf("&q = %p\n", (void *)&q); // 0x3000
  15.  
  16. printf("*a = %d\n", *a);
  17. printf("a[3] = %d\n", a[3]);
  18. printf("*(a + 3) = %d\n", *(a + 3));
  19. printf("(a + 2)[1] = %d\n", (a + 2)[1]);
  20. printf("(1 + a)[2] = %d\n", (1 + a)[2]);
  21. printf("*(3 + a) = %d\n", *(3 + a));
  22. printf("3[a] = %d\n", 3[a]);
  23. printf("2[a + 1] = %d\n", 2[a + 1]);
  24.  
  25. printf("a + 1 = %p\n", (void *)(a + 1));
  26. printf("&a[1] = %p\n", (void *)&a[1]);
  27. printf("&a[1] + 1 = %p\n", (void *)(&a[1] + 1));
  28. printf("&*a = %p\n", (void *)&*a);
  29. printf("&*a + 1 = %p\n", (void *)(&*a + 1));
  30. printf("&a + 1 = %p\n", (void *)(&a + 1));
  31.  
  32. printf("*p = %d\n", *p);
  33. printf("p[3] = %d\n", p[3]);
  34. printf("*(p + 3) = %d\n", *(p + 3));
  35. printf("(p + 2)[1] = %d\n", (p + 2)[1]);
  36. printf("(1 + p)[2] = %d\n", (1 + p)[2]);
  37. printf("*(3 + p) = %d\n", *(3 + p));
  38. printf("3[p] = %d\n", 3[p]);
  39. printf("2[p + 1] = %d\n", 2[p + 1]);
  40.  
  41. printf("p + 1 = %p\n", (void *)(p + 1));
  42. printf("&p[1] = %p\n", (void *)&p[1]);
  43. printf("&p[1] + 1 = %p\n", (void *)(&p[1] + 1));
  44. printf("&*p = %p\n", (void *)&*p);
  45. printf("&*p + 1 = %p\n", (void *)(&*p + 1));
  46. printf("&p + 1 = %p\n", (void *)(&p + 1));
  47.  
  48. printf("**q = %d\n", **q);
  49. printf("(*q)[3] = %d\n", (*q)[3]);
  50. printf("*(*q + 3) = %d\n", *(*q + 3));
  51. printf("(*q + 2)[1] = %d\n", (*q + 2)[1]);
  52. printf("(1 + *q)[2] = %d\n", (1 + *q)[2]);
  53. printf("*(3 + *q) = %d\n", *(3 + *q));
  54. printf("3[*q] = %d\n", 3[*q]);
  55. printf("2[*q + 1] = %d\n", 2[*q + 1]);
  56.  
  57. printf("*q + 1 = %p\n", (void *)(*q + 1));
  58. printf("&(*q)[1] = %p\n", (void *)&(*q)[1]);
  59. printf("&(*q)[1] + 1 = %p\n", (void *)(&(*q)[1] + 1));
  60. printf("&**q + 1 = %p\n", (void *)(&**q + 1));
  61. printf("&*q + 1 = %p\n", (void *)(&*q + 1));
  62. printf("&q + 1 = %p\n", (void *)(&q + 1));
  63.  
  64. return 0;
  65. }
Success #stdin #stdout 0s 5320KB
stdin
4
stdout
sizeof(int) = 4
sizeof p = 8
sizeof q = 8
&a = 0x7ffecc347190
&p = 0x7ffecc347180
&q = 0x7ffecc347188
*a = 10
a[3] = 40
*(a + 3) = 40
(a + 2)[1] = 40
(1 + a)[2] = 40
*(3 + a) = 40
3[a] = 40
2[a + 1] = 40
a + 1 = 0x7ffecc347194
&a[1] = 0x7ffecc347194
&a[1] + 1 = 0x7ffecc347198
&*a = 0x7ffecc347190
&*a + 1 = 0x7ffecc347194
&a + 1 = 0x7ffecc3471a4
*p = 10
p[3] = 40
*(p + 3) = 40
(p + 2)[1] = 40
(1 + p)[2] = 40
*(3 + p) = 40
3[p] = 40
2[p + 1] = 40
p + 1 = 0x7ffecc347194
&p[1] = 0x7ffecc347194
&p[1] + 1 = 0x7ffecc347198
&*p = 0x7ffecc347190
&*p + 1 = 0x7ffecc347194
&p + 1 = 0x7ffecc347188
**q = 10
(*q)[3] = 40
*(*q + 3) = 40
(*q + 2)[1] = 40
(1 + *q)[2] = 40
*(3 + *q) = 40
3[*q] = 40
2[*q + 1] = 40
*q + 1 = 0x7ffecc347194
&(*q)[1] = 0x7ffecc347194
&(*q)[1] + 1 = 0x7ffecc347198
&**q + 1 = 0x7ffecc347194
&*q + 1 = 0x7ffecc3471a4
&q + 1 = 0x7ffecc347190