C++ 구조체의 선언과 데이터 입·출력
2014.06.15 08:07
참고 문서 |
---|
구조체란?
- 데이터베이스에서의 레코드와 같은 구조를 표현할 수 있는 것이 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; }
구조체 저장 공간 할당의 예 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; }
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
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 |