Presentation is loading. Please wait.

Presentation is loading. Please wait.

5. 논리적 자료표현 : 구조체.

Similar presentations


Presentation on theme: "5. 논리적 자료표현 : 구조체."— Presentation transcript:

1 5. 논리적 자료표현 : 구조체

2 차 례 구조체 구조체 배열과 포인터

3 구조체 구조체 자료의 논리적 표현 단위 사용자가 필요에 의해 여러 자료를 하나의 자료형으로 정의
데이터 베이스의 레코드 형식을 하나의 자료형으로 정의

4 구조체 정의 구조체 태그 : 구조체 식별자, 생략 가능함 구조체 멤버 : 구조체를 구성하는 항목 구조체  하나의 자료형!!
//구조체 선언하여 변수 선언하기1 struct [태그이름] { 구조체 멤버 선언; }; struct [태그 이름] 변수이름1, 변수이름2; //구조체 선언하여 변수 선언하기2 struct [태그이름] { 구조체 멤버 선언; } 변수이름1, 변수이름2;

5 //일반 변수를 사용한 예 char Name[30]=""; char MPhoneNum[20]=""; //구조체를 정의해서 사용한 예 (태그명이 생략된 예) struct { char Name[30]; char MPhoneNum[20]; } friend; //구조체를 정의해서 사용한 예 (태그명을 사용한 예) struct FriendInfo { char Name[30]; char MPhoneNum[20]; }; FriendInfo friend;

6 strcpy_s(Name, 30, “김갑돌”); 구조체형 변수의 멤버 사용 – 구조체 멤버 참조 연산자(.)를 사용함
선언한 변수 : Name, MPhoneNum 선언한 변수 : friend 일반 변수는 변수이름 그대로 사용 : strcpy_s(Name, 30, “김갑돌”); 구조체형 변수의 멤버 사용 – 구조체 멤버 참조 연산자(.)를 사용함 strcpy_s(friend.Name, 30, “김갑순”);

7 소스 5-4 (ch05_02.cpp) struct { char Name[30]; char MPhoneNum[20]; } Friend, Friend1; strcpy_s(Friend.Name, 30, "김갑돌"); strcpy_s(Friend.MPhoneNum, 20, " "); Friend1=Friend; cout << Friend.Name << endl; cout << Friend.MPhoneNum << endl; cout << Friend1.Name << endl; cout << Friend1.MPhoneNum << endl;

8 구조체를 구조체 멤버로 구조체 멤버에 또 다른 구조체형 변수가 멤버로 사용이 가능함 struct POINT { int x;
int y; }; struct RECT struct POINT LeftTop; //struct POINT 구조체형 struct POINT RightBottom; //struct POINT 구조체형 int area;

9 a.area=(a.RightBottom.x-a.LeftTop.x)*(a.LeftTop.y-a.RightBottom.y);
소스 5-5 (ch05_03.cpp) struct RECT a; a.LeftTop.x=10; a.LeftTop.y=100; a.RightBottom.x=50; a.RightBottom.y=15; a.area=(a.RightBottom.x-a.LeftTop.x)*(a.LeftTop.y-a.RightBottom.y); cout << "직사각형 면적 : " << a.area << endl;

10 typedef 이미정의된내용 새로정의해서사용할내용;
typedef int integer;  프로그램 코드에서 int를 integer로 사용하겠다는 의미!!! 구조체 선언에서 typedef와 함께 사용하면 프로그램 코딩이 효율적!!! typedef 이미정의된내용 새로정의해서사용할내용;

11 struct sam { char Name[30]; char MPhoneNum[20]; } ; struct sam friend1, friend2; struct sam { char Name[30]; char MPhoneNum[20]; } ; typedef struct sam SAM; SAM friend1, friend2; typedef struct sam { char Name[30]; char MPhoneNum[20]; } SAM ; SAM friend1, friend2;

12 소스 5-7 (ch05_02_3.cpp) typedef struct sam { char Name[30]; char MPhoneNum[20]; } SAM; SAM Friend, Friend1; strcpy_s(Friend.Name, 30, "김갑돌"); strcpy_s(Friend.MPhoneNum, 20, " "); Friend1=Friend; cout << Friend.Name << endl; cout << Friend.MPhoneNum << endl; cout << Friend1.Name << endl; cout << Friend1.MPhoneNum << endl;

13 구조체 형 변수 초기화 변수 선언시 구조체 멤버 순서에 맞게 값을 할당하여 표시할 수 있음 typedef struct sam
{ char Name[30]; char MPhoneNum[20]; } SAM ; SAM friend1={“채치수”, “ ”}, friend2;

14 헤더파일 1 헤더파일의 역할 프로그램에 필요한 선언 내용
예) iostream.h의 경우 프로그램 작성에서 입출력관련 동작을 수행할때 프로그램 파일에 포함시키면 간단하게 관련 내용을 컴파일러가 인지함!! C++ 표준 라이브러리는 확장자를 명시하지 않는 것을 원칙으로 함 (1998년 표준) 프로그램 시작 부분에 #include <헤더파일이름>으로 포함

15 헤더파일 2 사용자가 작성한 헤더파일은 확장자를 표기하고 #include “헤더파일이름.h”로 표기
구조체는 자료형 선언이므로 일반적으로 헤더에 포함시키는 것이 적절함!!

16 헤더파일에 새 항목 “config.h”를 추가하기 (234, 235쪽)
#include <iostream> #include <string> using namespace std; typedef struct { char Name[30]; char MPhoneNum[20]; } SAM;

17 소스 파일 ch05_02_3.cpp 수정하기 (236쪽) #include "config.h“ int main() { SAM Friend; strcpy_s(Friend.Name, 30, "김갑돌"); strcpy_s(Friend.MPhoneNum, 20, " "); SAM Friend1; Friend1=Friend; cout << Friend.Name << endl; cout << Friend.MPhoneNum << endl; cout << Friend1.Name << endl; cout << Friend1.MPhoneNum << endl; return 0; }

18 구조체 배열 구조체 형 배열 연속적인 기억장소 할당 소스 5-11 (ch05_04.cpp)
#include <iostream> using namespace std; typedef struct { char Name[30]; char MPhoneNum[20]; } SAM;

19 int main() { SAM arr[5]={"김갑돌", " ", "이치수", " ", "정대호", " ", "한치욱", " ", "박사랑", " "}; int i; cout << "기본 크기 : " << sizeof(SAM) << endl; for (i=0; i<5; i++) cout << "arr[" << i << "]의 주소 : " << &arr[i] << endl; cout << "이름 : " << arr[i].Name << ", 휴대폰 번호 : " << arr[i].MPhoneNum << endl; return 0; }

20 구조체 포인터 구조체 포인터 구조체 포인터의 멤버 참조 동일한 구조체형 변수의 주소를 저장 (*구조체형 포인터 변수).멤버
구조체형포인터변수->멤버

21 소스 5-13 (ch05_05_1.cpp) typedef struct { char Name[30]; char MPhoneNum[20]; } SAM; int main() SAM a={"김행복", " "}; SAM *pa; pa=&a; cout << "이름 : " << a.Name << endl; cout << "이름 : " << (*pa).Name << endl; cout << "이름 : " << pa->Name << endl; cout << "전화번호 : " << pa->MPhoneNum << endl; return 0; }


Download ppt "5. 논리적 자료표현 : 구조체."

Similar presentations


Ads by Google