Data Structure Chapter 2 - Structure
배열과 비슷하지만 각 구성요소의 타입을 명시해야
/* 사용1 */
struct employee {
char name [10 ];
int year ;
int age ;
};
struct employee Park = { "Park" , 2018 , 2600 };
/* 사용2 */
struct employee {
char name [10 ];
int year ;
int age ;
} Park = { "Park" , 2018 , 2600 };
/* 사용3 */
struct {
char name [10 ];
int year ;
int age ;
} Park = { "Park" , 2018 , 2600 };
/* typedef 를 이용한 일반적 형태 */
typedef struct _employee {
char name [10 ];
int year ;
int age ;
} Employee ;
Employee Park = { "Park" , 2018 , 2600 };
2-12, 점 연산자를 이용해 데이터 항목 참조
#include <stdio.h>
struct employee {
char name [10 ];
int year ;
int pay ;
};
int main () {
struct employee Park [4 ] = {
{ "박흥준" , 2018 , 10000 },
{ "박형준" , 2013 , 10000 },
{ "박힁준" , 2018 , 10000 },
{ "박힇춘" , 1918 , 10000 },
};
int i ;
for (i = 0 ; i < 4 ; i ++ ) {
printf ("%s \n" , Park [i ].name );
printf ("struct addr: %u\n" , & Park [i ]);
printf ("char addr: %u, val: %s\n" , & Park [i ].name , Park [i ].name );
printf ("year addr: %u, val: %d \n" , & Park [i ].year , Park [i ].year );
printf ("pay addr: %u, val: %d \n\n" , & Park [i ].pay , Park [i ].pay );
}
return 0 ;
}
$ gcc 2-12.c -o 2-12.out && ./2-12.out
2-12.c: In function ‘main’:
2-12.c:22:31: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘struct employee * ’ [-Wformat= ]
printf(" struct addr: %u\n" , & Park[i]);
~ ^ ~ ~~~~~~~
2-12.c:23:29: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char (* )[10]’ [-Wformat= ]
printf(" char addr: %u, val: %s\n" , & Park[i].name, Park[i].name);
~ ^ ~ ~~~~~~~~~~~~
2-12.c:24:29: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int * ’ [-Wformat= ]
printf(" year addr: %u, val: %d \n" , & Park[i].year, Park[i].year);
~ ^ ~ ~~~~~~~~~~~~
%ls
2-12.c:25:28: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int * ’ [-Wformat= ]
printf(" pay addr: %u, val: %d \n\n" , & Park[i].pay, Park[i].pay);
~ ^ ~ ~~~~~~~~~~~
%ls
박흥준
struct addr: 2348284928
char addr: 2348284928, val: 박흥준
year addr: 2348284940, val: 2018
pay addr: 2348284944, val: 10000
박형준
struct addr: 2348284948
char addr: 2348284948, val: 박형준
year addr: 2348284960, val: 2013
pay addr: 2348284964, val: 10000
박힁준
struct addr: 2348284968
char addr: 2348284968, val: 박힁준
year addr: 2348284980, val: 2018
pay addr: 2348284984, val: 10000
박힇춘
struct addr: 2348284988
char addr: 2348284988, val: 박힇춘
year addr: 2348285000, val: 1918
pay addr: 2348285004, val: 10000
2-13, 화살표 연산자를 이용해 데이터 항목 참조하기
#include <stdio.h>
#include <string.h>
struct employee {
char name [10 ];
int year ;
int pay ;
};
int main () {
struct employee Park , Rock ;
struct employee * Sptr = & Park ;
struct employee * Sptr2 = & Rock ;
strcpy (Sptr -> name , "박흥준" );
Sptr -> year = 2011 ;
Sptr -> pay = 10830 ;
/*
* Not working
* Sptr2->name = "락흥";
* (*Sptr2).name = "락흥";
*/
strcpy ((* Sptr2 ).name , "락흥" );
(* Sptr2 ).year = 2013 ;
(* Sptr2 ).pay = 12830 ;
int i ;
printf ("%s \n" , Park .name );
printf ("struct addr: %u\n" , & Park );
printf ("char addr: %u, val: %s\n" , & Park .name , Sptr -> name );
printf ("year addr: %u, val: %d \n" , & Park .year , Sptr -> year );
printf ("pay addr: %u, val: %d \n\n" , & Park .pay , Sptr -> pay );
printf ("%s \n" , Rock .name );
printf ("struct addr: %u\n" , & Rock );
printf ("char addr: %u, val: %s\n" , & Rock .name , Sptr2 -> name );
printf ("year addr: %u, val: %d \n" , & Rock .year , Sptr2 -> year );
printf ("pay addr: %u, val: %d \n\n" , & Rock .pay , Sptr2 -> pay );
return 0 ;
}
$ gcc 2-13.c -o 2-13.out && ./2-13.out
2-13.c: In function ‘main’:
2-13.c:30:27: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘struct employee * ’ [-Wformat= ]
printf(" struct addr: %u\n" , & Park);
~ ^ ~ ~~~~
2-13.c:31:25: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char (* )[10]’ [-Wformat= ]
printf(" char addr: %u, val: %s\n" , & Park.name, Sptr-> name);
~ ^ ~ ~~~~~~~~~
2-13.c:32:25: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int * ’ [-Wformat= ]
printf(" year addr: %u, val: %d \n" , & Park.year, Sptr-> year);
~ ^ ~ ~~~~~~~~~
%ls
2-13.c:33:24: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int * ’ [-Wformat= ]
printf(" pay addr: %u, val: %d \n\n" , & Park.pay, Sptr-> pay);
~ ^ ~ ~~~~~~~~
%ls
2-13.c:36:27: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘struct employee * ’ [-Wformat= ]
printf(" struct addr: %u\n" , & Rock);
~ ^ ~ ~~~~
2-13.c:37:25: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘char (* )[10]’ [-Wformat= ]
printf(" char addr: %u, val: %s\n" , & Rock.name, Sptr2-> name);
~ ^ ~ ~~~~~~~~~
2-13.c:38:25: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int * ’ [-Wformat= ]
printf(" year addr: %u, val: %d \n" , & Rock.year, Sptr2-> year);
~ ^ ~ ~~~~~~~~~
%ls
2-13.c:39:24: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int * ’ [-Wformat= ]
printf(" pay addr: %u, val: %d \n\n" , & Rock.pay, Sptr2-> pay);
~ ^ ~ ~~~~~~~~
%ls
박흥준
struct addr: 1506390208
char addr: 1506390208, val: 박흥준
year addr: 1506390220, val: 2011
pay addr: 1506390224, val: 10830
락흥
struct addr: 1506390240
char addr: 1506390240, val: 락흥
year addr: 1506390252, val: 2013
pay addr: 1506390256, val: 12830
구조체 연산은 내부 데이터끼리, 같은 구조체끼리의 Rock = Park
와 같은 구문은 복사가 이루어짐, 주소는 구조체 &이름
을 포인터변수에 할당.