C++ 구조체의 선언과 데이터 입·출력

2014.06.15 08:07

엘카 조회 수:3084

참고 문서  
 구조체란? 
- 데이터베이스에서의 레코드와 같은 구조를 표현할 수 있는 것이 C언어의 구조체이다. 
- 여러 자료형이 복합된 자료를 효율적으로 처리할 목적으로 정의된 통합 자료형이다. 
- 특정 사항에 관련된 자료형의 변수들을 모아 하나의 자료형으로 만들어 사용하는 것으로써, 
  일종의 "사용자 정의 자료형"이다. 
- 구조체는 멤버(member)라고 하는 값들의 모임이며, 구조체의 멤버들은 대부분 서로 다른 
  타입으로 구성될 수 있다. 


구조체의 선언 형식 
struct 구조체_자료형명 
   자료형  멤버1; 
   자료형  멤버2; 
      ... 
   자료형  멤버N; 
 }  구조체_변수_리스트; 


구조체와 구조체 변수의 선언 예 
struct  EMPLOYEE { 
                   char   emp_no[6];          // 사원번호 
                   char   emp_name[20];   // 사원이름 
                   char   dept[20];           // 부서 
                   int    salary;           // 월급 
                   int    sudang;           // 수당 
                   float  tax;           // 세금 
                   float  deduction;           // 실수령액 
 } emp1, emp2; 

구조체의 변수의 선언과 초기화 
struct  EMPLOYEE { 
                   char   emp_no[6];         // 사원번호 
                   char   emp_name[20];  // 사원이름 
                   char   dept[20];          // 부서 
                   int    salary;          // 월급 
                   int    sudang;          // 수당 
                   float  tax;          // 세금 
                   float  deduction;          // 실수령액 
} emp1 = {"A2008", "홍길동", "개발부", 1500000, 170000}; 

구조체 멤버에 대한 접근과 구조체 멤버 연산자  
     - 구조체 변수에 할당된 멤버에 접근하려면 각 멤버는  구조체변수명.멤버명 형식으로 표현 
      - 구조체변수명과 멤버명 사이에 사용되는 '.'을 구조체 멤버 연산자라고 한다. 

구조체 변수 자료형의 크기를 구할 때는 sizeof( ) 연산자를 사용한다. 
sizeof(struct  EMPLOYEE);  // 구조체 자료형 이름으로 크기를 구할 때 
sizeof(emp1);    // 구조체 변수명으로 크기를 구할 때 


#include <stdio.h> 
 
int main(void) 
{   
   struct EMPLOYEE {  
      char emp_no[6];         
                     char emp_name[20];         
                     char dept[20];           
                     int salary;           
                     int sudang;           
                     float tax;        
                     float deduction;    
   } emp1 ={"A2001", "홍길동", "개발부", 1500000, 170000}; 
 
   printf("구조체의 크기 : %d, %d \n",  
           sizeof(struct EMPLOYEE), sizeof(emp1));      
 
printf("사원번호 ? ");   
 gets(emp1.emp_no);  
   printf("성명 ? ");   
   gets(emp1.emp_name);   
   printf("부서명 ? ");   
   gets(emp1.dept);   
   printf("월급 ? ");   
   scanf("%d", &emp1.salary);   
   printf("수당 ? ");   
   scanf("%d", &emp1.sudang);    
   emp1.tax=(emp1.salary+emp1.sudang)*0.03;    
   emp1.deduction=(emp1.salary+emp1.sudang)-emp1.tax;    
   printf("%s, %s, %s, %d, %d, %.2f, %.2f \n",  emp1.emp_no, 
emp1.emp_name, emp1.dept, emp1.salary,  emp1.sudang, emp1.tax, 
emp1.deduction); 
   
   return 0; 
} 



 typedef 과 구조체 
- 구조체와 typedef 을 이용한 새로운 자료형의 선언 예 

struct EMPLOYEE { char name[20]; 
                  char phone[15]; 
                  int  age; }; 
typedef struct EMPLOYEE EMP; // EMP는 새로운 자료형 명 

typedef struct EMPLOYEE { char name[20]; 
                          char phone[15]; 
                          int  age; } EMP;  

 구조체 복사(대입) 
- 동일한 구조의 구조체 변수는 일반 변수처럼 대입하면 그 안의 모든 멤버가 함께  
  복사될 수 있다. 
emp2 = emp1;  // 구조체 멤버들을 하나하나 옮길 필요가 없다. 
struct EMPLOYEE emp2, emp1={"A2008","홍길동","개발부",1500000,170000}; 

 구조체 저장 공간의 할당 
- 구조체는 선언되는 멤버의 배치에 따라 멤버 간에 많은 빈 공간을 포함할 수 있다.  
- 멤버들 사이에 경계 정렬(boundary alignment)이 필요한 경우가 발생 될 수 있다. 
  이 때 얼라인먼트를 통해 효율적인 주소 사용을 위한 메모리의 경계 조절이 가능하다. 


구조체 저장 공간 할당의 예 1 
#include <stdio.h> 
 
int main(void) 
{ 
   struct S { 
               char a; 
               int  b; 
               char c;   
             } st1; 
   printf("st1 : %d \n", sizeof(st1)); 
   printf("a의주소: %p \n", &st1.a); 
   printf("b의주소: %p \n", &st1.b); 
   printf("c의주소: %p \n", &st1.c); 
   return 0; 
} 

m5T5HOW.jpg



구조체 저장 공간 할당의 예 2 
#include <stdio.h> 
 
int main(void) 
{ 
   struct S { 
               int  b; 
               char a; 
               char c;   
             } st1; 
   printf("st1 : %d \n", sizeof(st1)); 
   printf("b의주소: %p \n", &st1.b); 
   printf("a의주소: %p \n", &st1.a); 
   printf("c의주소: %p \n", &st1.c); 
   return 0; 
} 
PWgNver.jpg

번호 제목 날짜 조회 수
43 구조체 포인터 2014.06.15 931
» 구조체의 선언과 데이터 입·출력 2014.06.15 3084
41 함수 포인터 2014.06.15 447
40 배열과 포인터 2014.06.15 406
39 포인터 연산 2014.06.15 384
38 포인터 변수 2014.06.15 414
37 데이터 정렬 2014.06.15 424
36 배열 초기화 2014.06.14 630
35 2차원 배열 2014.06.14 670
34 문자열 처리 함수 2014.06.14 412
33 문자열 입출력 함수 2014.06.14 442
32 접근 수정자 2014.06.14 824
31 전역 변수 2014.06.14 308
30 지역 변수(local variable) 2014.06.14 295
29 변수와 메모리 저장 위치 2014.06.14 428
28 비트 연산자 2014.06.14 288
27 관계 연산자와 논리 연산자 2014.06.14 472
26 증감 연산자 2014.06.14 319
25 printf() 함수의 형식 지정자 2014.06.14 7522
24 열거 형 변수의 이해 2014.06.14 465