Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //linux, 64bit, gcc, -Wall -Wextra -Wpedantic -Wshadow
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define ST_STR_LEN 256
- char first_str[] = "Andromeda";
- char second_str[] = "Zeppelin";
- struct st0 {
- char c;
- int i;
- float f;
- double d;
- };
- struct st1 {
- char c;
- int i;
- float f;
- double d;
- } s1,s2;
- typedef struct st2 {
- char c;
- int i;
- float f;
- double d;
- } St2;
- typedef struct {
- char c;
- int i;
- float f;
- double d;
- } St3;
- typedef struct {
- char c;
- char *p_str;
- } St4;
- typedef struct {
- char c;
- char str[ST_STR_LEN];
- } St5;
- typedef struct {
- char c;
- St3 s;
- } St6;
- typedef struct {
- char c;
- St3 s[14];
- } St7;
- typedef struct {
- char c;
- char ca[12];
- } St8;
- typedef struct {
- int a;
- int b __attribute__ ((packed));
- int c __attribute__ ((packed));
- int *p __attribute__ ((packed));
- } S9;
- typedef struct {
- int a;
- int b __attribute__ ((aligned (16)));
- int c __attribute__ ((aligned (16)));
- int *p __attribute__ ((aligned (16)));
- } S10;
- int main()
- {
- struct st0 s0;
- s0.c = 'o';
- s0.i = 1;
- s0.f = 1.2f;
- s0.d = 12.1;
- printf( "s0.c: %c\n", s0.c );
- printf( "s0.i: %d\n", s0.i );
- printf( "s0.f: %f\n", s0.f );
- printf( "s0.d: %f\n\n", s0.d );
- s1.c = 'a';
- s1.i = 123;
- s1.f = 1.23f;
- s1.d = 12.3;
- printf( "s1.c: %c\n", s1.c );
- printf( "s1.i: %d\n", s1.i );
- printf( "s1.f: %f\n", s1.f );
- printf( "s1.d: %f\n\n", s1.d );
- s2 = s1;
- printf( "s2.c: %c\n", s2.c );
- printf( "s2.i: %d\n", s2.i );
- printf( "s2.f: %f\n", s2.f );
- printf( "s2.d: %f\n\n", s2.d );
- printf( "sizeof (struct st1): %zu\n", sizeof (struct st1) );
- printf( "sizeof s2: %zu\n", sizeof s2 );
- printf( "sizeof &s2: %zu\n", sizeof &s2 );
- printf( "sizeof s2.c: %zu\n", sizeof s2.c );
- printf( "sizeof s2.i: %zu\n", sizeof s2.i );
- printf( "sizeof s2.f: %zu\n", sizeof s2.f );
- printf( "sizeof s2.d: %zu\n\n", sizeof s2.d );
- struct st1 *p_s3;
- p_s3 = &s1;
- printf( "p_s3.c: %c\n", p_s3->c );
- printf( "p_s3.i: %d\n", p_s3->i );
- printf( "p_s3.f: %f\n", p_s3->f );
- printf( "p_s3.d: %f\n", p_s3->d );
- printf( "sizeof p_s3: %zu\n", sizeof p_s3 );
- printf( "sizeof &p_s3: %zu\n", sizeof &p_s3 );
- printf( "sizeof *p_s3: %zu\n", sizeof *p_s3 );
- printf( "sizeof p_s3.c: %zu\n", sizeof p_s3->c );
- printf( "sizeof p_s3.i: %zu\n", sizeof p_s3->i );
- printf( "sizeof p_s3.f: %zu\n", sizeof p_s3->f );
- printf( "sizeof p_s3.d: %zu\n", sizeof p_s3->d );
- printf( "&s1: %p\n", (void *) &s1 );
- printf( "p_s3: %p\n", (void *) p_s3 );
- printf( "&p_s3: %p\n", (void *) &p_s3 );
- printf( "HEX: p_s3: %#lx\n\n", (long unsigned int) p_s3 );
- printf("s1 before:\n\n");
- printf( "s1.c: %c\n", s1.c );
- printf( "s1.i: %d\n", s1.i );
- printf( "s1.f: %f\n", s1.f );
- printf( "s1.d: %f\n\n", s1.d );
- p_s3->c = 'b';
- p_s3->i = 321;
- p_s3->f = 3.21f;
- p_s3->d = 32.1;
- printf("s1 after:\n\n");
- printf( "s1.c: %c\n", s1.c );
- printf( "s1.i: %d\n", s1.i );
- printf( "s1.f: %f\n", s1.f );
- printf( "s1.d: %f\n\n", s1.d );
- struct st2 test_s_1;
- test_s_1.c = 'c';
- test_s_1.i = 22;
- test_s_1.f = 2.2f;
- test_s_1.d = 22.0;
- printf( "test_s_1.c: %c\n", test_s_1.c );
- printf( "test_s_1.i: %d\n", test_s_1.i );
- printf( "test_s_1.f: %f\n", test_s_1.f );
- printf( "test_s_1.d: %f\n\n", test_s_1.d );
- St2 test_s_2;
- test_s_2.c = 'd';
- test_s_2.i = 222;
- test_s_2.f = 2.22f;
- test_s_2.d = 222.0;
- printf( "test_s_2.c: %c\n", test_s_2.c );
- printf( "test_s_2.i: %d\n", test_s_2.i );
- printf( "test_s_2.f: %f\n", test_s_2.f );
- printf( "test_s_2.d: %f\n\n", test_s_2.d );
- St3 test_s_3;
- test_s_3.c = 'd';
- test_s_3.i = 333;
- test_s_3.f = 3.33f;
- test_s_3.d = 333.0;
- printf( "test_s_3.c: %c\n", test_s_3.c );
- printf( "test_s_3.i: %d\n", test_s_3.i );
- printf( "test_s_3.f: %f\n", test_s_3.f );
- printf( "test_s_3.d: %f\n\n", test_s_3.d );
- St3 *p_s_3;
- p_s_3 = malloc( sizeof p_s_3 );
- if ( !p_s_3 )
- {
- printf("Error: cannot allocate memory.\n");
- }
- else
- {
- p_s_3->c = 'e';
- p_s_3->i = 111;
- p_s_3->f = 1.11f;
- p_s_3->d = 111.0;
- printf( "p_s_3->c: %c\n", p_s_3->c );
- printf( "p_s_3->i: %d\n", p_s_3->i );
- printf( "p_s_3->f: %f\n", p_s_3->f );
- printf( "p_s_3->d: %f\n\n", p_s_3->d );
- free( p_s_3 );
- }
- St4 s4;
- s4.c = 'f';
- s4.p_str = first_str;
- printf( "s4.c: %c\n", s4.c );
- printf( "s4.p_str: %s\n\n", s4.p_str );
- St4 s4a;
- s4a = s4;
- printf( "s4a.c: %c\n", s4a.c );
- printf( "s4a.p_str: %s\n\n", s4a.p_str );
- s4.p_str = second_str;
- printf( "(2) s4.c: %c\n", s4.c );
- printf( "(2) s4.p_str: %s\n\n", s4.p_str );
- printf( "(2) s4a.c: %c\n", s4a.c );
- printf( "(2) s4a.p_str: %s\n\n", s4a.p_str );
- St5 s5 = {0};
- s5.c = 'g';
- if ( strlen(first_str) < ST_STR_LEN - 1 )
- {
- printf("\"%s\", length: %ld\n\n", first_str, strlen(first_str));
- strcpy( s5.str, first_str );
- }
- else
- {
- printf("Error: first string too long.\n");
- }
- printf( "(1) s5.c: %c\n", s5.c );
- printf( "(1) s5.str: %s\n\n", s5.str );
- if ( strlen(second_str) < ST_STR_LEN - 1 )
- {
- printf("\"%s\", length: %ld\n\n", second_str, strlen(second_str));
- strcpy( s5.str, second_str );
- }
- else
- {
- printf("Error: second string too long.\n");
- }
- printf( "(2) s5.c: %c\n", s5.c );
- printf( "(2) s5.str: %s\n\n", s5.str );
- St5 s5a = { .c = 'h', .str = "Orion" };
- printf( "s5a.c: %c\n", s5a.c );
- printf( "s5a.str: %s\n\n", s5a.str );
- St5 s5b = { .str = "Capricorn", .c = 'r' };
- printf( "s5b.c: %c\n", s5b.c );
- printf( "s5b.str: %s\n\n", s5b.str );
- St6 s6;
- printf( "sizeof s6: %zu\n", sizeof s6 );
- printf( "sizeof &s6: %zu\n", sizeof &s6 );
- printf( "sizeof s6.c: %zu\n", sizeof s6.c );
- printf( "sizeof s6.s: %zu\n\n", sizeof s6.s );
- s6.s.c = 'j';
- printf( "s6.s.c: %c\n\n", s6.s.c );
- St7 s7;
- printf( "sizeof s7: %zu\n", sizeof s7 );
- printf( "sizeof &s7: %zu\n", sizeof &s7 );
- printf( "sizeof s7.c: %zu\n", sizeof s7.c );
- printf( "sizeof s7.s: %zu\n\n", sizeof s7.s );
- s7.s[0].c = 'k';
- s7.s[1].c = 'l';
- printf( "s7.s[0].c: %c\n", s7.s[0].c );
- printf( "s7.s[1].c: %c\n\n", s7.s[1].c );
- St8 s8;
- printf( "sizeof s8: %zu\n", sizeof s8 );
- printf( "sizeof &s8: %zu\n", sizeof &s8 );
- printf( "sizeof s8.c: %zu\n", sizeof s8.c );
- printf( "sizeof s8.ca: %zu\n\n", sizeof s8.ca );
- s8.ca[0] = 'm';
- s8.ca[1] = 'n';
- printf( "s8.ca[0]: %c\n", s8.ca[0] );
- printf( "s8.ca[1]: %c\n\n", s8.ca[1] );
- S9 strc_9;
- S9 strc_9a[10];
- S10 strc_10;
- S10 strc_10a[10];
- printf("sizeof (S9): %zu\n", sizeof (S9));
- printf("sizeof strc_9: %zu\n", sizeof strc_9);
- printf("sizeof strc_9a: %zu\n", sizeof strc_9a);
- printf("sizeof *strc_9a: %zu\n", sizeof *strc_9a);
- printf("sizeof strc_9a[0]: %zu\n\n", sizeof strc_9a[0]);
- printf("sizeof (S10): %zu\n", sizeof (S10));
- printf("sizeof strc_10: %zu\n", sizeof strc_10);
- printf("sizeof strc_10a: %zu\n", sizeof strc_10a);
- printf("sizeof *strc_10a: %zu\n", sizeof *strc_10a);
- printf("sizeof strc_10a[0]: %zu\n\n", sizeof strc_10a[0]);
- return 0;
- }
- /*
- output:
- s0.c: o
- s0.i: 1
- s0.f: 1.200000
- s0.d: 12.100000
- s1.c: a
- s1.i: 123
- s1.f: 1.230000
- s1.d: 12.300000
- s2.c: a
- s2.i: 123
- s2.f: 1.230000
- s2.d: 12.300000
- sizeof (struct st1): 24
- sizeof s2: 24
- sizeof &s2: 8
- sizeof s2.c: 1
- sizeof s2.i: 4
- sizeof s2.f: 4
- sizeof s2.d: 8
- p_s3.c: a
- p_s3.i: 123
- p_s3.f: 1.230000
- p_s3.d: 12.300000
- sizeof p_s3: 8
- sizeof &p_s3: 8
- sizeof *p_s3: 24
- sizeof p_s3.c: 1
- sizeof p_s3.i: 4
- sizeof p_s3.f: 4
- sizeof p_s3.d: 8
- &s1: 0x555ef2857040
- p_s3: 0x555ef2857040
- &p_s3: 0x7ffc5cdffac0
- HEX: p_s3: 0x555ef2857040
- s1 before:
- s1.c: a
- s1.i: 123
- s1.f: 1.230000
- s1.d: 12.300000
- s1 after:
- s1.c: b
- s1.i: 321
- s1.f: 3.210000
- s1.d: 32.100000
- test_s_1.c: c
- test_s_1.i: 22
- test_s_1.f: 2.200000
- test_s_1.d: 22.000000
- test_s_2.c: d
- test_s_2.i: 222
- test_s_2.f: 2.220000
- test_s_2.d: 222.000000
- test_s_3.c: d
- test_s_3.i: 333
- test_s_3.f: 3.330000
- test_s_3.d: 333.000000
- p_s_3->c: e
- p_s_3->i: 111
- p_s_3->f: 1.110000
- p_s_3->d: 111.000000
- s4.c: f
- s4.p_str: Andromeda
- s4a.c: f
- s4a.p_str: Andromeda
- (2) s4.c: f
- (2) s4.p_str: Zeppelin
- (2) s4a.c: f
- (2) s4a.p_str: Andromeda
- "Andromeda", length: 9
- (1) s5.c: g
- (1) s5.str: Andromeda
- "Zeppelin", length: 8
- (2) s5.c: g
- (2) s5.str: Zeppelin
- s5a.c: h
- s5a.str: Orion
- s5b.c: r
- s5b.str: Capricorn
- sizeof s6: 32
- sizeof &s6: 8
- sizeof s6.c: 1
- sizeof s6.s: 24
- s6.s.c: j
- sizeof s7: 344
- sizeof &s7: 8
- sizeof s7.c: 1
- sizeof s7.s: 336
- s7.s[0].c: k
- s7.s[1].c: l
- sizeof s8: 13
- sizeof &s8: 8
- sizeof s8.c: 1
- sizeof s8.ca: 12
- s8.ca[0]: m
- s8.ca[1]: n
- sizeof (S9): 20
- sizeof strc_9: 20
- sizeof strc_9a: 200
- sizeof *strc_9a: 20
- sizeof strc_9a[0]: 20
- sizeof (S10): 64
- sizeof strc_10: 64
- sizeof strc_10a: 640
- sizeof *strc_10a: 64
- sizeof strc_10a[0]: 64
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement