1.1 구조체란 1.2 중첩 구조체 1.3 구조체와 배열 1.4 구조체와 포인터 1.5 구조체와 함수 1.6 공용체와 열거형.

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
제2장 C 언어의 확장 C++(1).
구조체란 무엇인가 ? 예: 학생관리 프로그램의 각 학생에 대한 기록(record) 구조체는 여러 자료형 변수들의 집합체이다.
Part 12 구조체와 공용체 안산1대학 디지털정보통신과 임 성 국.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
2007 1학기 16 구조체.
8장 포인터.
5장. 참조 타입.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 프로그래밍.
C 프로그래밍.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
23장. 구조체와 사용자 정의 자료형 2.
자료구조 실험 PSLab. 이태호.
14장. 포인터와 함수에 대한 이해.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
C언어: 구조체 (Structures).
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
구조체.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
-Part2- 제1장 1차원 배열이란 무엇인가.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
제 6 장 함수(functions).
구조체 (Structure).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
Chapter 11 구조체.
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

1.1 구조체란 1.2 중첩 구조체 1.3 구조체와 배열 1.4 구조체와 포인터 1.5 구조체와 함수 1.6 공용체와 열거형

1.1 구조체란

► 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화 ⑤ 구조체 변수의 복사

► 구조체 하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형

► 구조체의 정의 ① 구조체 키워드 : 구조체의 시작을 알리는 struct 키워드 지정 ② 구조체 이름 : 구조체를 구분하는 이름 ③ 멤버변수 : 구조체를 구성하는 구조체 멤버 변수의 이름 struct point { int x; int y; }; ② 구조체 이름 ③ 멤버 변수 ① 구조체의 시작을 알리는 키워드

► 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화 ⑤ 구조체 변수의 복사

► 구조체 정의, 구조체 변수 선언 – 동시에 #include struct point { int x; int y; } p1, p2, p3; int main(void) { … return 0; }

► 구조체 정의, 구조체 변수 선언 – 따로 #include struct point { int x; int y; }; int main(void) { struct point p1, p2, p3; … return 0; }

► 일반 변수 vs. 구조체 변수 == int b; int c; int a; int a, b, c ; struct point p1; struct point p2; struct point p3; == struct point p1, p2, p3; 자료형 변수 자료형 변수 일반 변수의 선언 자료형 변수 자료형 변수 구조체 변수의 선언

► 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화 ⑤ 구조체 변수의 복사

#include struct group // 구조체 정의 { int a; double b; }; int main(void) { struct group g1; // 구조체 변수 g1 선언 g1.a=10; // 구조체 변수로 멤버 변수 접근 g1.b=1.1234; // 구조체 변수로 멤버 변수 접근 printf("g1.a 의 값 : %d \n", g1.a); printf("g1.b 의 값 : %lf \n", g1.b); return 0; }

► 구조체 변수 g1 의 메모리 구조

#include struct group // 구조체 정의 { int a; double b; }; int main(void) { struct group g1; // 구조체 변수 g1 선언 scanf("%d %lf", &g1.a, &g1.b); // 데이터 입력 printf("g1.a 의 값 : %d \n", g1.a); printf("g1.b 의 값 : %lf \n", g1.b); return 0; }

► 구조체 변수를 사용하는 법 구조체 변수 : 멤버 변수에 접근하게 해주는 구조체 변수의 이름을 지정 접근 연산자 : 구조체 변수로 멤버 변수에 접근하는 연산자 지정 멤버 변수 : 접근하려는 멤버 변수의 이름을 지정

► 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화 ⑤ 구조체 변수의 복사

#include struct point { int x; int y; }; int main(void) { struct point p1={10, 20}; // 구조체 변수의 초기화 printf("%d %d \n", p1.x, p1.y); return 0; }

► 구조체 변수 p1 의 메모리 구조

#include struct point { int x; int y; }; int main(void) { struct point p1={10, 20}; struct point p2={30, 40}; struct point p3={0, 0}; p3.x = p2.x - p1.x; p3.y = p2.y - p1.y; printf("%d %d \n", p3.x, p3.y); return 0; } Y축Y축 p1 (10,20) p2 (30,40) X축X축

► 구조체 변수 p1, p2, p3 의 메모리 구조 10 p1.x &p1 20 p1.y p1 30 p2.x &p2 40 p2.y p2 20 p3.x &p3 20 p3.y p3

► 구조체 변수의 초기화 중괄호를 이용한 ‘ 구조체 변수 ’ 의 초기화 시 주의사항 구조체 변수의 선언과 구조체 변수의 초기화를 따로 하면 에러가 발생 struct point p1; p1={10, 20}; // 에러 struct point p1; p1.x=10; // 정상 p1.y=20; // 정상 struct point p1 = {10, 20}; // 정상

► 배울 내용 ① 구조체 정의 ② 구조체 변수 ③ 구조체 변수로 멤버 변수에 접근하기 ④ 구조체 변수의 초기화 ⑤ 구조체 변수의 복사

► 구조체 변수의 복사 일반 변수의 복사와 같이 구조체 변수 간 복사 가능 int a=3; int b=0; b=a; // 변수의 복사 printf("%d %d \n", a, b); struct point p1={10, 20}; struct point p2={0, 0}; p2=p1 // 구조체 변수의 복사

#include struct point { int x; int y; }; int main(void) { struct point p1={10, 20}; struct point p2={0, 0}; p2=p1; // 구조체 변수 p2 에 p1 을 복사 printf("%d %d \n", p1.x, p1.y); printf("%d %d \n", p2.x, p2.y); return 0; }

► 구조체 변수 간의 복사 10 p1.x 20 p1.y p1 10 p2.x 20 p2.y p2 복사

#include struct point { int x; int y; }; int main(void) { struct point p1={10, 20}; struct point p2={0, 0}; p2+p1; // 에러 p2-p1; // 에러 return 0; } 구조체 변수 간 산술연산 불가능

1.2 중첩 구조체

► 배울 내용 ① 중첩 구조체 ② 중첩 구조체의 초기화 ③ typedef 를 이용한 구조체의 재정의

► 중첩 구조체 구조체 내에 구조체가 포함 ‘ 구조체 변수를 멤버변수로 사용한다.’

#include struct score { double math; double english; double total; }; struct student { int no; struct score s ; }; int main(void) { struct student stu; stu.no= ; stu.s.math=90; stu.s.english=80; stu.s.total=stu.s.math+stu.s.english; printf(" 학번 : %d \n", stu.no); printf(" 총점 : %lf \n", stu.s.total); return 0; }

► 배울 내용 ① 중첩 구조체 ② 중첩 구조체의 초기화 ③ typedef 를 이용한 구조체의 재정의

#include struct score { double math; double english; double total; }; struct student { int no; struct score s; }; int main(void) { struct student stu={ , {90, 80, 0}}; // struct student stu={ , 90, 80, 0}; stu.s.total=stu.s.math+stu.s.english; printf(" 학번 : %d \n", stu.no); printf(" 총점 : %lf \n", stu.s.total); return 0; } 중첩 구조체의 초기화 방법 2 가지

(1) 중첩 중괄호를 사용한 초기화

(2) 중첩 중괄호를 생략한 초기화

► 배울 내용 ① 중첩 구조체 ② 중첩 구조체의 초기화 ③ typedef 를 이용한 구조체의 재정의

►typedef 의 사용 방법

#include typedef struct score { double math; double english; double average; } SCORE; struct student { int no; SCORE s; // struct socre s; }; typedef struct student STUDENT ; int main(void) { STUDENT stu={ , {90, 80, 0}}; stu.s. average=(stu.s.math+stu.s.english)/2; printf(" 학번 : %d \n", stu.no); printf(" 평균점수 : %lf \n", stu.s.average); return 0; }

1.3 구조체와 배열

► 배울 내용 ① 멤버 변수로 배열 사용하기 ② 구조체 변수로 배열 사용하기 ③ 멤버 변수로 배열을 사용할 때 주의 사항

#include struct student { char no[10]; // 학번 ( 멤버변수에 배열 사용 ) char name[20]; // 이름 ( 멤버변수에 배열 사용 ) double math; // 수학 점수 double english; // 영어 점수 double total; // 총점 }; int main(void) { struct student stu1={" ", "Park", 80, 80, 0}; // 학생 1 의 정보 struct student stu2={" ", "Kim", 95, 85, 0}; // 학생 2 의 정보 struct student stu3={" ", "Lee", 100, 90, 0}; // 학생 3 의 정보

stu1.total=stu1.math+stu1.english; printf(" 학번 : %s, 이름 : %s \n", stu1.no, stu1.name); printf(" 총점 : %lf \n", stu1.total); printf("\n"); stu2.total=stu2.math+stu2.english; printf(" 학번 : %s, 이름 : %s \n", stu2.no, stu2.name); printf(" 총점 : %lf \n", stu2.total); printf("\n"); stu3.total=stu3.math+stu3.english; printf(" 학번 : %s, 이름 : %s \n", stu3.no, stu3.name); printf(" 총점 : %lf \n", stu3.total); return 0; }

► 배울 내용 ① 멤버 변수로 배열 사용하기 ② 구조체 변수로 배열 사용하기 ③ 멤버 변수로 배열을 사용할 때 주의 사항

#include struct student { char no[10]; char name[20]; double math; double english; double total; }; int main(void) { int i=0; struct student stu[3]={ {" ", "Park", 80, 80, 0}, {" ", "Kim", 95, 85, 0}, {" ", "Lee", 100, 90, 0} }; for(i=0; i<3; i++) { stu[i].total=stu[i].math+stu[i].english; printf(" 학번 : %s, 이름 : %s \n", stu[i].no, stu[i].name); printf(" 총점 : %lf \n", stu[i].total); printf("\n"); } return 0; } 구조체 변수로 배열 사용

► 배울 내용 ① 멤버 변수로 배열 사용하기 ② 구조체 변수로 배열 사용하기 ③ 멤버 변수로 배열을 사용할 때 주의 사항

#include struct student { char no[10]; // 멤버 변수로 배열 선언 char name[20]; // 멤버 변수로 배열 선언 }; int main(void) { int i=0; struct student stu; stu.no=" "; // 에러 stu.name="Park"; // 에러 printf(" 학번 : %s, 이름 : %s \n", stu.no, stu.name); return 0; } > 배열의 시작 주소에 문자열을 입력

#include struct student { char no[10]; // 멤버 변수로 배열 선언 char name[20]; // 멤버 변수로 배열 선언 }; int main(void) { int i=0; struct student stu; strcpy (stu.no, " "); strcpy (stu.name, "Park"); printf(" 학번 : %s, 이름 : %s \n", stu.no, stu.name); return 0; } > strcpy() 함수 사용 (PART3-2 장 참조 )

#include struct student { char* no; // 멤버 변수로 포인터 선언 char* name; // 멤버 변수로 포인터 선언 }; int main(void) { int i=0; struct student stu; stu.no = " ”; stu.name = "Park“; printf(" 학번 : %s, 이름 : %s \n", stu.no, stu.name); return 0; } > 멤버 변수로 포인터 선언 ( 다음 슬라이드참조 )

1.4 구조체와 포인터

► 배울 내용 ① 멤버 변수로 포인터 사용하기 ② 구조체 변수로 포인터 사용하기 ③ 자기 참조 구조체와 외부 참조 구조체

► 멤버 변수로 포인터 사용하기 struct point { int* x; // 멤버 변수로 1 차원 포인터 선언 int* y; // 멤버 변수로 1 차원 포인터 선언 }; struct point { int* x; // 멤버 변수로 1 차원 포인터 선언 int** y; // 멤버 변수로 2 차원 포인터 선언 }

#include struct point { int* x; // 1 차원 포인터 멤버변수 int* y; // 1 차원 포인터 멤버변수 }; int main(void) { int num1=4; int num2=5; struct point p1; p1.x=&num1; p1.y=&num2; printf("%d %d \n", num1, num2); printf("%d %d \n", *p1.x, *p1.y); return 0; } ‘. 연산자가 * 연산자보다 우선순위가 높다.’

#include struct point { int* x; // 1 차원 포인터 멤버변수 int** y; // 2 차원 포인터 멤버변수 }; int main(void) { int num1 = 3; struct point p1; p1.x = &num1; p1.y = &p1.x; printf("%d %d %d \n", num1, *p1.x, **p1.y); return 0; }

#include struct point { int x; int y; }; int main(void) { struct point p1={20,30}; printf(" 구조체 변수 p1 의 주소 : %x \n", &p1); printf(" 멤버 변수 p1.x 의 주소 : %x \n", &p1.x); return 0; }

► 배울 내용 ① 멤버 변수로 포인터 사용하기 ② 구조체 변수로 포인터 사용하기 ③ 자기 참조 구조체와 외부 참조 구조체

#include struct student { char no[10]; // 학번 char name[20]; // 이름 double total; // 총점 }; int main(void) { struct student stu = {" ", "Park", 160}; struct student* p=NULL; // 1 차원 구조체 포인터 변수 선언 p = &stu; printf("%s %s %lf \n",stu.no, stu.name, stu.total); printf("%s %s %lf \n",(*p).no, (*p).name, (*p).total); printf("%s %s %lf \n",p->no, p->name, p->total); return 0; }

#include struct student { char no[10]; // 학번 char name[20]; // 이름 double total; // 총점 }; int main(void) { struct student stu = {" ", "Park", 160}; struct student* p=NULL; struct student** pp=NULL;

p = &stu; pp = &p; printf("%s %s %lf \n",stu.no, stu.name, stu.total); printf("%s %s %lf \n",(*p).no, (*p).name, (*p).total); printf("%s %s %lf \n",p->no, p->name, p->total); printf("%s %s %lf \n",(**pp).no, (**pp).name, (**pp).total); printf("%s %s %lf \n",(*pp)->no, (*pp)->name, (*pp)->total); return 0; }

► 배울 내용 ① 멤버 변수로 포인터 사용하기 ② 구조체 변수로 포인터 사용하기 ③ 자기 참조 구조체와 외부 참조 구조체

구조체 내에서 자기 구조체 참조 구조체 내에서 외부 구조체 참조

#include struct student { char name[20]; // 이름 int money; // 나이 struct student* link; // 자기 참조 구조체 포인터 변수 }; int main(void) { struct student stu1 = {"Kim", 90, NULL}; struct student stu2 = {"Lee", 80, NULL}; struct student stu3 = {"Goo", 60, NULL};

stu1.link = &stu2; stu2.link = &stu3; printf("%s %d \n", stu1.name, stu1.money); printf("%s %d \n", stu1.link->name, stu1.link->money); printf("%s %d \n", stu1.link->link->name, stu1.link->link->money); return 0; }

struct student { char name[20]; int money; struct student* left_link; struct student* right_link; }; struct student stu1 = {"Kim", 90, NULL, NULL}; struct student stu2 = {"Lee", 80, NULL, NULL}; struct student stu3 = {"Goo", 60, NULL, NULL};

stu1.left_link = &stu2; stu1.right_link= &stu3; printf("%s %d \n", stu1.name, stu1.money); printf("%s %d \n", stu1.left_link->name, stu1.left_link->money); printf("%s %d \n", stu1.right_link->name, stu1.right_link->money);

#include struct point { int x; // x 좌표 int y; // y 좌표 }; struct student { char name[20]; struct point* link; }; int main(void) { struct student stu1 = {"Kim", NULL}; struct student stu2 = {"Lee", NULL}; struct point p1 = {30, 40}; struct point p2 = {60, 80}; stu1.link = &p1; stu2.link = &p2; printf("%s %d %d \n", stu1.name, stu1.link->x, stu1.link->y); printf("%s %d %d \n", stu2.name, stu2.link->x, stu2.link->y); return 0; }

1.5 구조체와 함수

► 배울 내용 ① 구조체를 함수의 인자로 전달하기 – 값에 의한 호출과 주소에 의한 호출 ② 구조체를 함수의 반환형으로 전달하기 – 값 반환과 주소 반환

► 값에 의한 호출 (Call by value)

#include struct point // 구조체 정의 { int x; int y; }; void function (struct point call); // 함수의 선언 int main(void) { struct point p = {10, 20}; function(p); // 값에 의한 호출 (call by value) return 0; } void function (struct point call) // 함수의 정의 { printf("%d %d \n", call.x, call.y); // 10, 20 출력 }

int main(void) { struct point p = { 10, 20 }; function ( p ); … } void function (struct point call) { printf("%d %d \n", call.x, call.y);} p 는 call 에 복사됨

► 주소에 의한 호출 (call by reference)

#include struct point { int x; int y; }; void function (struct point* call); // 함수의 선언 int main(void) { struct point p = {10, 20}; function(&p); // 주소에 의한 호출 (call by reference) return 0; } void function (struct point* call) // 함수의 정의 { printf("%d %d \n", call->x, call->y); printf("%d %d \n", (*call).x, (*call).y); }

int main(void) { struct point p = { 10, 20 }; function ( &p ); … } void function (struct point* call) { printf("%d %d \n", call->x, call->y); printf("%d %d \n", (*call).x, (*call).y); } p 의 주소가 포인터 변수 call 에 저장

► 배울 내용 ① 구조체를 함수의 인자로 전달하기 – 값에 의한 호출과 주소에 의한 호출 ② 구조체를 함수의 반환형으로 전달하기 – 값 반환과 주소 반환

► 구조체의 값 (value) 을 반환 (return) 하는 함수 struct point function ( ) { struct point p={10, 20}; return p; } 함수의 반환형 : 구조체 값 반환 ① 반환 형태 ② 구조체 변수 이름

#include struct point { int x; int y; }; struct point function(void); // 함수의 선언 int main(void) { struct point p; p = function(); // 함수 호출 printf("%d %d \n", p.x, p.y); return 0; } struct point function(void) // 함수의 정의 { struct point call = {10, 20}; return call; // 구조체 변수 call 반환

► 구조체 주소 (reference) 를 반환 (return) 하는 함수 struct point* function ( ) { static struct point p={10, 20}; return &p; } 함수의 반환형 : 구조체 주소반환 ① 반환 형태 ② 구조체 변수의 주소

#include struct point { int x; int y; }; struct point* function(void); // 함수의 선언 int main(void) { struct point* p; p = function(); // 함수 호출 printf("%d %d \n", p->x, p->y); printf("%d %d \n", (*p).x,(*p).y); return 0; } struct point* function(void) // 함수의 정의 { static struct point call = {10, 20}; return &call; // 구조체 변수 call 의 주소 반환

1.6 공용체와 열거형

► 배울 내용 ① 공용체 ② 열거형

► 공용체 멤버 변수들 중 가장 큰 메모리 공간을 ‘ 공유 ’ 해서 사용 ‘union’ 키워드 사용 공용체 멤버 변수의 선언 : 구조체와 동일 공용체 변수의 선언 : 구조체와 동일 멤버 변수 접근 : 구조체와 동일

► 구조체

► 공용체

#include union point // 공용체 정의 { int x; int y; }; struct student // 구조체 정의 { int a; int b; }; int main(void) { printf("%d %d \n",sizeof(union point), sizeof(struct student) ); return 0; }

#include union point // 공용체정의 { int x; int y; }; int main(void) { union point p; // 공용체변수선언 p.x = 10; printf("%d %d \n", p.x, p.y); return 0; }

► 배울 내용 ① 공용체 ② 열거형

► 열거형 변수가 갖는 값에 의미를 부여 프로그램의 가독성이 높아짐 컴파일러는 실제로 열거형 멤버들을 정수형 상수로 인식 ► 정의 방법 열거형 키워드 : enum 키워드를 지정 열거형 이름 : 열거형을 대표하는 열거형 이름 지정 상수 이름 : 열거형 데이터로 사용할 상수 이름을 지정

#include enum week {ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN}; // 열거형 정의 enum season {SPRING, SUMMER=2, FALL, WINTER}; // 열거형 정의 int main(void) { enum week p1, p2, p3; // 열거형 변수 p1, p2, p3 선언 enum season s1, s2, s3, s4; // 열거형 변수 s1, s2, s3, s4 선언 p1 = ONE; p2 = TWO; p3 = THREE; printf("%d %d %d \n", ONE, TWO, THREE ); printf("%d %d %d \n", p1, p2, p3 ); s1 = SPRING; s2 = SUMMER; s3 = FALL; s4 = WINTER; printf("%d %d %d %d \n", SPRING, SUMMER, FALL, WINTER ); printf("%d %d %d %d \n", s1, s2, s3, s4 ); return 0; }

► 구조체의 정의, 구조체 변수, 구조체 변수로 멤버 변수의 접근 ► 구조체 변수의 초기화, 구조체 변수의 복사 ► 중첩 구조체, 중첩 구조체의 초기화 ►typedef 를 이용하여 사용자 정의 자료형의 재정의 방법 ► 구조체 배열과 구조체 포인터 ► 구조체와 함수, 공용체와 열거형