RicardasSim

arg struct

Jul 31st, 2021
600
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //-Wall -Wextra -Wpedantic -Wshadow
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct{
  6. char a;
  7. int b;
  8. }TestStruct;
  9.  
  10. void TestF1( TestStruct s )
  11. {
  12.     printf(" (F1) %c %d\n", s.a, s.b );
  13. }
  14.  
  15. void TestF2( TestStruct *p_s )
  16. {
  17.     printf(" (F2) %c %d\n", p_s->a, p_s->b );
  18. }
  19.  
  20. void TestF3( TestStruct *p_s )
  21. {
  22.     TestStruct s = *p_s;
  23.     printf("(F3a) %c %d\n", s.a, s.b );
  24.     s.a = 'd';
  25.     s.b = 231;
  26.     printf("(F3b) %c %d\n", s.a, s.b );
  27. }
  28.  
  29. void TestF4( TestStruct *p_s )
  30. {
  31.     p_s->a = 'b';
  32.     p_s->b = 321;
  33. }
  34.  
  35. void TestV( char *p_a, int *p_i )
  36. {
  37.     *p_a = 'c';
  38.     *p_i = 312;
  39. }
  40.  
  41. int main()
  42. {
  43.  
  44.     TestStruct tsts;
  45.  
  46.     tsts.a = 'a';
  47.     tsts.b = 123;
  48.  
  49.     printf("  (1) %c %d\n", tsts.a, tsts.b );
  50.  
  51.     TestStruct *p_ts;
  52.  
  53.     p_ts = &tsts;
  54.  
  55.     printf("  (2) %c %d\n", p_ts->a, p_ts->b );
  56.  
  57.     TestF1(tsts);
  58.     TestF1(*p_ts);
  59.  
  60.     TestF2(&tsts);
  61.     TestF2(p_ts);
  62.  
  63.     TestF3(&tsts);
  64.     TestF3(p_ts);
  65.  
  66.     printf("  (3) %c %d\n", tsts.a, tsts.b );
  67.     printf("  (4) %c %d\n", p_ts->a, p_ts->b );
  68.  
  69.     TestF4( &tsts );
  70.  
  71.     printf("  (5) %c %d\n", tsts.a, tsts.b );
  72.     printf("  (6) %c %d\n", p_ts->a, p_ts->b );
  73.  
  74.     tsts.a = 'c';
  75.     tsts.b = 132;
  76.  
  77.     printf("  (7) %c %d\n", tsts.a, tsts.b );
  78.     printf("  (8) %c %d\n", p_ts->a, p_ts->b );
  79.  
  80.     TestF4( p_ts );
  81.  
  82.     printf("  (9) %c %d\n", tsts.a, tsts.b );
  83.     printf(" (10) %c %d\n", p_ts->a, p_ts->b );
  84.  
  85.     char c = 'a';
  86.     int i = 1;
  87.  
  88.     printf (" (11) %c %d\n", c, i);
  89.  
  90.     TestV(&c,&i);
  91.  
  92.     printf (" (12) %c %d\n", c, i);
  93.  
  94.     return 0;
  95. }
  96.  
  97. /*
  98. output:
  99.  
  100.   (1) a 123
  101.   (2) a 123
  102.  (F1) a 123
  103.  (F1) a 123
  104.  (F2) a 123
  105.  (F2) a 123
  106. (F3a) a 123
  107. (F3b) d 231
  108. (F3a) a 123
  109. (F3b) d 231
  110.   (3) a 123
  111.   (4) a 123
  112.   (5) b 321
  113.   (6) b 321
  114.   (7) c 132
  115.   (8) c 132
  116.   (9) b 321
  117.  (10) b 321
  118.  (11) a 1
  119.  (12) c 312
  120.  
  121. */
  122.  
RAW Paste Data