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));
  10. printf("sizeof p = %zu\n", sizeof p);
  11. printf("sizeof q = %zu\n", sizeof q);
  12. printf("&a = %p\n", (void *)&a);
  13. printf("&p = %p\n", (void *)&p);
  14. printf("&q = %p\n", (void *)&q);
  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. }
  66.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
sizeof(int) = 4
sizeof p = 8
sizeof q = 8
&a = 0x7ffdbcf18650
&p = 0x7ffdbcf18640
&q = 0x7ffdbcf18648
*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 = 0x7ffdbcf18654
&a[1] = 0x7ffdbcf18654
&a[1] + 1 = 0x7ffdbcf18658
&*a = 0x7ffdbcf18650
&*a + 1 = 0x7ffdbcf18654
&a + 1 = 0x7ffdbcf18664
*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 = 0x7ffdbcf18654
&p[1] = 0x7ffdbcf18654
&p[1] + 1 = 0x7ffdbcf18658
&*p = 0x7ffdbcf18650
&*p + 1 = 0x7ffdbcf18654
&p + 1 = 0x7ffdbcf18648
**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 = 0x7ffdbcf18654
&(*q)[1] = 0x7ffdbcf18654
&(*q)[1] + 1 = 0x7ffdbcf18658
&**q + 1 = 0x7ffdbcf18654
&*q + 1 = 0x7ffdbcf18664
&q + 1 = 0x7ffdbcf18650