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