RicardasSim icon

arg struct

RicardasSim | PRO | 07/31/21 12:45:58 PM UTC | 0 ⭐ | 1197 👁️ | Never ⏰ | []
C |

1.85 KB

|

None

|

0 👍

/

0 👎

//-Wall -Wextra -Wpedantic -Wshadow
#include <stdio.h>
#include <stdlib.h>
 
typedef struct{
char a;
int b;
}TestStruct;
 
void TestF1( TestStruct s )
{
    printf(" (F1) %c %d\n", s.a, s.b );
}
 
void TestF2( TestStruct *p_s )
{
    printf(" (F2) %c %d\n", p_s->a, p_s->b );
}
 
void TestF3( TestStruct *p_s )
{
    TestStruct s = *p_s;
    printf("(F3a) %c %d\n", s.a, s.b );
    s.a = 'd';
    s.b = 231;
    printf("(F3b) %c %d\n", s.a, s.b );
}
 
void TestF4( TestStruct *p_s )
{
    p_s->a = 'b';
    p_s->b = 321;
}
 
void TestV( char *p_a, int *p_i )
{
    *p_a = 'c';
    *p_i = 312;
}
 
int main()
{
 
    TestStruct tsts;
 
    tsts.a = 'a';
    tsts.b = 123;
 
    printf("  (1) %c %d\n", tsts.a, tsts.b );
 
    TestStruct *p_ts;
 
    p_ts = &tsts;
 
    printf("  (2) %c %d\n", p_ts->a, p_ts->b );
 
    TestF1(tsts);
    TestF1(*p_ts);
 
    TestF2(&tsts);
    TestF2(p_ts);
 
    TestF3(&tsts);
    TestF3(p_ts);
 
    printf("  (3) %c %d\n", tsts.a, tsts.b );
    printf("  (4) %c %d\n", p_ts->a, p_ts->b );
 
    TestF4( &tsts );
 
    printf("  (5) %c %d\n", tsts.a, tsts.b );
    printf("  (6) %c %d\n", p_ts->a, p_ts->b );
 
    tsts.a = 'c';
    tsts.b = 132;
 
    printf("  (7) %c %d\n", tsts.a, tsts.b );
    printf("  (8) %c %d\n", p_ts->a, p_ts->b );
 
    TestF4( p_ts );
 
    printf("  (9) %c %d\n", tsts.a, tsts.b );
    printf(" (10) %c %d\n", p_ts->a, p_ts->b );
 
    char c = 'a';
    int i = 1;
 
    printf (" (11) %c %d\n", c, i);
 
    TestV(&c,&i);
 
    printf (" (12) %c %d\n", c, i);
 
    return 0;
}
 
/*
output:
 
  (1) a 123
  (2) a 123
 (F1) a 123
 (F1) a 123
 (F2) a 123
 (F2) a 123
(F3a) a 123
(F3b) d 231
(F3a) a 123
(F3b) d 231
  (3) a 123
  (4) a 123
  (5) b 321
  (6) b 321
  (7) c 132
  (8) c 132
  (9) b 321
 (10) b 321
 (11) a 1
 (12) c 312
 
*/
 

Comments