fork download
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<math.h>
  4.  
  5. int main()
  6. {
  7. /* Ђќбычныеї переменные */
  8. int a = 1;
  9. float b = 2;
  10. double c = 3;
  11. /* ”казатели */
  12. int *p1 = &a;
  13. float *p2 = &b;
  14. double *p3 = &c;
  15. void *p4 = NULL;
  16. /* јдреса Ђобычныхї переменных и размер выдел€емой пам€ти */
  17. printf("a: int: start address %p extent %d\n",&a,sizeof(a));
  18. printf("b: float: start address %p extent %d\n",&b,sizeof(b));
  19. printf("c: double: start address %p extent %d\n\n",&c,sizeof(c));
  20. /* јдреса указателей и размер выдел€емой пам€ти */
  21. printf("p1: pointer: start address %p extent %d\n",&p1,sizeof(p1));
  22. printf("p2: pointer: start address %p extent %d\n",&p2,sizeof(p2));
  23. printf("p3: pointer: start address %p extent %d\n\n",&p3,sizeof(p3));
  24. printf("p4: pointer: start address %p extent %d\n\n",&p4,sizeof(p4));
  25. /* «начени€, на которые ссылаютс€ указатели */
  26. printf("p1: %p related value %d\n",p1,*p1);
  27. printf("p2: %p related value %f\n",p2,*p2);
  28. printf("p3: %p related value %lf\n\n",p3,*p3);
  29. /* »спользование указателей в выражени€х */
  30. printf("a=%d\tb=%f\tc=%lf\n",a,b,c);
  31. *p1 = 5;
  32. *p2 = *p2 * *p1;
  33. *p3 = sqrt(*p3);
  34. printf("a=%d\tb=%f\tc=%lf\n",a,b,c);
  35. printf("*p1=%d\t*p2=%f\t*p3=%lf\n\n",*p1,*p2,*p3);
  36. /* ѕрисваивание указателей */
  37. p1 = (int*)p2;
  38. p3 = (double*)p2;
  39. p4 = p2;
  40. printf("p1=%p\tp2=%p\tp3=%p\tp4=%p\n",p1,p2,p3,p4);
  41. printf("*p1=%d\t*p2=%f\t*p3=%f\t*(float*)p4=%f\n\n",*p1,*p2,*p3,*(float*)p4);
  42. /* »зменение значений указателей */
  43. p1++;
  44. p3--;
  45. printf("p1=%p\tp2=%p\tp3=%p\n",p1,p2,p3);
  46. printf("*p1=%d\t\t*p2=%f\t*p3=%lf\n",*p1,*p2,*p3);
  47. p1 -= 4;
  48. p3 = (double*)&a - 1;
  49. printf("p1=%p\tp2=%p\tp3=%p\n",p1,p2,p3);
  50. printf("*p1=%d\t*p2=%f\t*p3=%lf\n",*p1,*p2,*p3);
  51. return 0;
  52. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
a:      int: start address 0x7fff11224cb8 extent 4
b:    float: start address 0x7fff11224cbc extent 4
c:   double: start address 0x7fff11224cc0 extent 8

p1: pointer: start address 0x7fff11224cc8 extent 8
p2: pointer: start address 0x7fff11224cd0 extent 8
p3: pointer: start address 0x7fff11224cd8 extent 8

p4: pointer: start address 0x7fff11224ce0 extent 8

p1: 0x7fff11224cb8 related value 1
p2: 0x7fff11224cbc related value 2.000000
p3: 0x7fff11224cc0 related value 3.000000

a=1	b=2.000000	c=3.000000
a=5	b=10.000000	c=1.732051
*p1=5	*p2=10.000000	*p3=1.732051

p1=0x7fff11224cbc	p2=0x7fff11224cbc	p3=0x7fff11224cbc	p4=0x7fff11224cbc
*p1=1092616192	*p2=10.000000	*p3=-443459608143134273662885840611191986994302798471837256132976627811013080170989229007181138033542832573601215845759122503060014697629963593860094327024446067406523292934412865706388667269788991488.000000	*(float*)p4=10.000000

p1=0x7fff11224cc0	p2=0x7fff11224cbc	p3=0x7fff11224cb4
*p1=-396866390		*p2=10.000000	*p3=0.000000
p1=0x7fff11224cb0	p2=0x7fff11224cbc	p3=0x7fff11224cb0
*p1=1	*p2=10.000000	*p3=0.000000