Advertisement
dllbridge

Untitled

Jan 17th, 2025
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.02 KB | None | 0 0
  1.  
  2. #include  <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. /////////////////////////////////////
  6. struct T
  7. {
  8.        
  9.     int  n;      
  10.     T   *p;  
  11. };
  12.  
  13.  
  14.  
  15.  
  16. ///////////////////////////////////////////////
  17. int main()
  18. {
  19.    
  20.     int n = 5;
  21.    
  22.     int *p = (int*)malloc(4);
  23.    
  24.    *p = 85;
  25.    
  26.     printf("*p = %d\n", *p);
  27.    
  28.     int &r = *p;
  29.    
  30.     printf(" r = %d\n",  r);
  31.    
  32.     free(p);  
  33. }
  34.  
  35.  
  36.  
  37. #include  <iostream>
  38. #include   <stdio.h>
  39. #include  <stddef.h>
  40.  
  41. using namespace std;
  42.  
  43. //////////////////////////
  44. struct T
  45. {
  46.     int   n;
  47.     float f;
  48.     char  c;
  49. };
  50.  
  51. void foo(T *);
  52.  
  53.  
  54. //////////////////////////////////////////////////////
  55. int main()                                          //
  56. {
  57.    
  58.     T t1;
  59.     t1.f = 3.14;
  60.     t1.n = 1980;
  61.    
  62.     printf("size of t1 = %d\n", sizeof(T) );
  63.                                                                 // этот код как получить смещение полей структуры на
  64.     int offset1 = offsetof(struct T, n);
  65.     int offset2 = offsetof(struct T, f);
  66.                                                                                // выводим значения смещений на экран
  67.     printf("Offsets:\n");
  68.     printf("offset1 = %d <> offset2 = %d\n\n", offset1, offset2);
  69.  
  70.                                                                         // выводим значения полей структуры на экран
  71.     printf("Struct field:\n");
  72.     printf("n = %d <> f = %f\n\n", t1.n, t1.f);
  73.  
  74.                                                                 // здесь я пробую изменить значение поля n структуры
  75.     char *p = (char *) &t1;
  76.  
  77.     *((int *)(p + offset1)) = 5;
  78.  
  79.                                                                         // выводим значения полей структуры на экран
  80.     printf("Change field n:\n");
  81.     printf("n = %d <> f = %f\n\n", t1.n, t1.f);
  82.  
  83.     foo(&t1);
  84. }
  85.  
  86.  
  87. //////////////////////////////////////////////////////
  88. void foo(T *pt)                                     //
  89. {
  90.      
  91.     printf("Struct field:\n");
  92.    
  93.     int *pn = (int*)pt;
  94.    
  95.     printf("n = %d\n", *pn);    
  96.    
  97.     pn++;
  98.    
  99.     printf("f = %.2f\n", *(float*)pn);
  100.     printf("f = %.2f\n", (float*)(&pn[0]));
  101. }
  102.  
  103.  
  104.  
  105.  
  106. /*
  107. //////////////////////////////////////////////////////
  108. void foo(T *pt)                                     //
  109. {
  110.      
  111.     printf("Struct field:\n");
  112.     // такой способ получения значения структуры заработал у меня только потому что первое поле сделал типом int
  113.     printf("n = %d\n", *((int *)(pt)));
  114.     // здесь я уже забуксовал хотя догадываюсь, что это из-за того, что я не понимаю как в памяти хранится вещественное число
  115.     printf("f = %f\n\n", *( (double *)(int *)(pt) + 4) );
  116. }
  117. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement