C 프로그래밍.

Slides:



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

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
구조체, 포인터 활용 컴퓨터시뮬레이션학과 2014년 봄학기 담당교수 : 이형원 E304호,
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
구조체 활용 구조체 활용.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express.
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장 포인터.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
C 프로그래밍.
포인터 활용 포인터 활용.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
23장. 구조체와 사용자 정의 자료형 2.
14장. 포인터와 함수에 대한 이해.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
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장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
구조체.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 프로그래밍 기초 - 5th : 조건문(if, else if, else, switch-case) -
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 7 장 배열.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
-Part2- 제1장 1차원 배열이란 무엇인가.
구조체 배열 실습: 평점이 최고인 학생의 정보를 출력하기
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
구조체 (Structure).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Chapter 11 구조체.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

C 프로그래밍

-Part1- 제1장 구조체와 공용체란 무엇인가

1.1 구조체란

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

1.1 구조체란 (1/18) 구조체 하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형

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

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

1.1 구조체란 (3/18) 구조체 정의, 구조체 변수 선언 – 동시에 #include <stdio.h>   struct point { int x; int y; } p1, p2, p3; int main(void) … return 0; } 

1.1 구조체란 (4/18) 구조체 정의, 구조체 변수 선언 – 따로 #include <stdio.h>   struct point { int x; int y; }; int main(void) struct point p1, p2, p3; … return 0; } 

== == 1.1 구조체란 (5/18) 일반 변수 vs. 구조체 변수 int b; c; a; 일반 변수의 선언 int 자료형 변수 int b; c; a; 자료형 변수 일반 변수의 선언 == int a, b, c ; 자료형 변수 struct point p1; 자료형 변수 == 구조체 변수의 선언 struct point p2; struct point p1, p2, p3; struct point p3;

구조체 선언 구조체 선언 형식 struct 태그 { 자료형 멤버1; 자료형 멤버2; ... };

구조체 변수 선언 구조체 정의와 구조체 변수 선언은 다르다.

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

1.1 구조체란 (6/18)---[1-1.c 실습] #include <stdio.h> 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; }

1.1 구조체란 (7/18)---[1-1.c 분석] 구조체 변수 g1의 메모리 구조

1.1 구조체란 (8/18)---[1-2.c 실습] #include <stdio.h> 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; }

1.1 구조체란 (9/18) 구조체 변수를 사용하는 법 구조체 변수: 멤버 변수에 접근하게 해주는 구조체 변수의 이름을 지정 접근 연산자: 구조체 변수로 멤버 변수에 접근하는 연산자 지정 멤버 변수: 접근하려는 멤버 변수의 이름을 지정

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

1.1 구조체란 (10/18)---[1-3.c 실습] #include <stdio.h> struct point { int x; int y; }; int main(void) struct point p1={10, 20}; // 구조체 변수의 초기화 printf("%d %d \n", p1.x, p1.y); return 0; }

1.1 구조체란 (11/18)---[1-3.c 분석] 구조체 변수 p1의 메모리 구조

1.1 구조체란 (12/18)---[1-4.c 실습] #include <stdio.h> 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축 10 20 30 40 p1(10,20) p2(30,40) X축 Y축 X축

1.1 구조체란 (13/18)---[1-4.c 분석] 구조체 변수 p1, p2, p3의 메모리 구조 p3 30 p2 40 10 p1.x &p1 20 p1.y p1 30 p2.x &p2 40 p2.y p2 p3.x &p3 p3.y p3

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

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

1.1 구조체란 (15/18) 구조체 변수의 복사 일반 변수의 복사와 같이 구조체 변수 간 복사 가능 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 // 구조체 변수의 복사

1.1 구조체란 (16/18)---[1-5.c 실습] #include <stdio.h> 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; }

1.1 구조체란 (17/18)---[1-5.c 분석] 구조체 변수 간의 복사 10 p2 p1 20 복사 p2.x p1.x p1.y p1 p2.x p2.y p2 복사

1.1 구조체란 (18/18)---[1-6.c 실습] 구조체 변수 간 산술연산 불가능 #include <stdio.h> 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-6-1.c 실습] #include<stdio.h> struct point { int x; int y; }; int main(void) { struct point p1 = {10, 20}; struct point p2 = {30, 40}; p2 = p1; // 대입 가능 if( p1 == p2 ) // 비교 -> 컴파일 오류!! printf("p1와 p2이 같습니다."); if( (p1.x == p2.x) && (p1.y == p2.y) ) // 올바른 비교 }

EX. 다음과 같이 출력되도록 프로그램을 완성하시오. 1) 학번,이름,학점은 scanf 함수 사용 2) 이름은 배열로 처리 함 struct student { int number; char name[10]; double grade; };

#include <stdio.h> struct student { int number; char name[10]; double grade; }; int main(void) { struct student s; printf("학번을 입력하시오: "); scanf("%d", &s.number); printf("이름을 입력하시오: "); scanf("%s", s.name); printf("학점을 입력하시오(실수): "); scanf("%lf", &s.grade); printf("학번: %d\n", s.number); printf("이름: %s\n", s.name); printf("학점: %.1lf\n", s.grade); return 0; }

1.2 중첩 구조체

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

1.2 중첩 구조체 (1/9) 중첩 구조체 구조체 내에 구조체가 포함 ‘구조체 변수를 멤버변수로 사용한다.’

1.2 중첩 구조체 (2/9)---[1-7.c 실습] int main(void) #include <stdio.h> { struct student stu; stu.no=20101323; 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; } #include <stdio.h> struct score { double math; double english; double total; }; struct student int no; struct score s ;

1.2 중첩 구조체 (3/9)---[1-7.c 분석] struct student stu

#include <stdio.h> struct point { int x; int y; }; struct rect { struct point p1; struct point p2; int main(void) { struct rect r; int w, h, area, peri; printf("왼쪽 상단의 좌표를 입력하시오: "); scanf("%d %d", &r.p1.x, &r.p1.y); printf("오른쪽 상단의 좌표를 입력하시오: "); scanf("%d %d", &r.p2.x, &r.p2.y);

w = r.p2.x - r.p1.x; h = r.p2.x - r.p1.x; area = w * h; peri = 2 * w + 2 * h; printf("면적은 %d이고 둘레는 %d입니다.\n", area, peri); return 0; }

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

1.2 중첩 구조체 (4/9)---[1-8.c 실습] 중첩 구조체의 초기화 방법 2가지 #include <stdio.h> struct score { double math; double english; double total; }; struct student int no; struct score s; 중첩 구조체의 초기화 방법 2가지 int main(void) { struct student stu={20101323, {90, 80, 0}}; // struct student stu={20101323, 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; }

1.2 중첩 구조체 (5/9)---[1-8.c 분석] (1) 중첩 중괄호를 사용한 초기화

1.2 중첩 구조체 (6/9)---[1-8.c 분석] (2) 중첩 중괄호를 생략한 초기화

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

1.2 중첩 구조체 (7/9) typedef의 사용 방법

1.2 중첩 구조체 (8/9)---[1-9.c 실습(1/2)] #include <stdio.h> 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={20101323, {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.2 중첩 구조체 (9/9)

#include <stdio.h> typedef struct point { int x; int y; } POINT; POINT translate(POINT p, POINT delta); int main(void) { POINT p = { 2, 3 }; POINT delta = { 10, 10 }; POINT result; result = translate(p, delta); printf("새로운 점의 좌표는(%d, %d)입니다.\n", result.x, result.y); return 0; } // translate 함수를 완성하시오.

POINT translate(POINT p, POINT delta) { POINT new_p; new_p.x = p.x + delta.x; new_p.y = p.y + delta.y; return new_p; }

1.3 구조체와 배열

구조체 배열 struct student { int number; char name[20]; double grade; };

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

1.3 구조체와 배열 (1/7)---[1-10.c 실습(1/2)] #include <stdio.h> struct student { char no[10]; // 학번 (멤버변수에 배열 사용) char name[20]; // 이름 (멤버변수에 배열 사용) double math; // 수학 점수 double english; // 영어 점수 double total; // 총점 }; int main(void) struct student stu1={"20101323", "Park", 80, 80, 0}; // 학생 1의 정보 struct student stu2={"20101324", "Kim", 95, 85, 0}; // 학생 2의 정보 struct student stu3={"20101325", "Lee", 100, 90, 0}; // 학생 3의 정보

1.3 구조체와 배열 (2/7)---[1-10.c 실습(2/2)] 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); stu3.total=stu3.math+stu3.english; printf("학번: %s, 이름: %s \n", stu3.no, stu3.name); printf("총점: %lf \n", stu3.total); return 0; }

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

1.3 구조체와 배열 (3/7)---[1-11.c 실습(1/2)] 구조체 변수로 배열 사용 int main(void) { int i=0; struct student stu[3]={ {"20101323", "Park", 80, 80, 0}, {"20101324", "Kim", 95, 85, 0}, {"20101325", "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 <stdio.h> struct student { char no[10]; char name[20]; double math; double english; double total; };

1.3 구조체와 배열 (4/7)---[1-11.c 분석]

[array_0f_struct.c 실습] #include <stdio.h> #define SIZE 3 struct student { int number; char name[20]; double grade; }; int main(void) { struct student list[SIZE]; int i; for(i = 0; i < SIZE; i++) printf("학번을 입력하시오: "); scanf("%d", &list[i].number); printf("이름을 입력하시오: "); scanf("%s", list[i].name); printf("학점을 입력하시오(실수): "); scanf("%lf", &list[i].grade); } [array_0f_struct.c 실습]

for(i = 0; i< SIZE; i++) { printf("학번: %d, 이름: %s, 학점: %lf\n", list[i].number, list[i].name, list[i].grade); } return 0;

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

1.3 구조체와 배열 (5/7)---[1-13.c 실습] <<에러>> 배열의 시작 주소에 문자열을 입력 #include <stdio.h> struct student { char no[10]; // 멤버 변수로 배열 선언 char name[20]; // 멤버 변수로 배열 선언 }; int main(void) struct student stu; stu.no="20101323"; // 에러 stu.name="Park"; // 에러 printf("학번: %s, 이름: %s \n", stu.no, stu.name); return 0; } <<에러>> 배열의 시작 주소에 문자열을 입력

<<에러 해결 1>> 1.3 구조체와 배열 (6/7)---[1-14.c 실습] #include <stdio.h> #include <string.h> struct student { char no[10]; // 멤버 변수로 배열 선언 char name[20]; // 멤버 변수로 배열 선언 }; int main(void) struct student stu; strcpy (stu.no, "20101323"); strcpy (stu.name, "Park"); printf("학번: %s, 이름: %s \n", stu.no, stu.name); return 0; } <<에러 해결 1>> strcpy()함수 사용(PART3-2장 참조)

<<에러 해결 2>> 1.3 구조체와 배열 (7/7)---[참고] #include <stdio.h> struct student { char* no; // 멤버 변수로 포인터 선언 char* name; // 멤버 변수로 포인터 선언 }; int main(void) struct student stu; stu.no = "20101323”; stu.name = "Park“; printf("학번: %s, 이름: %s \n", stu.no, stu.name); return 0; } <<에러 해결 2>> 멤버 변수로 포인터 선언(다음 슬라이드참조)

Ex1.각각의 음식에 대하여 음식의 이름, 칼로리 정보를 구조체로 표현한다 각각의 식사 코스에서 등장하는 음식들을 구조체의 배열로 표현하고 각 식사 코스의 전체 칼로리를 계산하는 프로그램을 작성하시오. #include <stdio.h> struct food { char name[100]; int calories; }; int calc_total_calroies(struct food array[], int size); int main(void) { struct food food_array[3]= {{"hambuger", 900}, {"bulgogi", 500}, {"sushi", 700}};

printf("%d\n", total); return 0; } int calc_total_calroies(struct food array[], int size) { int i, total=0;

int total = calc_total_calroies(food_array, 3); printf("%d\n", total); return 0; } int calc_total_calroies(struct food array[], int size) { int i, total=0; for(i=0;i<size;i++){ total += array[i].calories; return total;

1.4 구조체와 포인터

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

1.4 구조체와 포인터 (1/15) 멤버 변수로 포인터 사용하기 struct point { int* x; // 멤버 변수로 1차원 포인터 선언 int* y; // 멤버 변수로 1차원 포인터 선언 }; struct point { int* x; // 멤버 변수로 1차원 포인터 선언 int** y; // 멤버 변수로 2차원 포인터 선언 }

1.4 구조체와 포인터 (3/15)---[1-15.c 실습] . 연산자가 *연산자보다 우선순위가 높다 #include <stdio.h> 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; } . 연산자가 *연산자보다 우선순위가 높다

1.4 구조체와 포인터 (4/15)---[1-16.c 실습] #include<stdio.h> 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; }

1.4 구조체와 포인터 (5/15)---[1-17.c 실습] #include<stdio.h> 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; }

포인터를 멤버로 가지는 구조체 struct date { int month; int day; int year; }; struct student { int number; char name[20]; double grade; struct date *dob;

포인터를 멤버로 가지는 구조체 int main(void) { struct date d = { 3, 20, 1980 }; struct student s = { 20070001, "Kim", 4.3 }; s.dob = &d; printf("학번: %d\n", s.number); printf("이름: %s\n", s.name); printf("학점: %lf\n", s.grade); printf("생년월일: %d년 %d월 %d일\n", s.dob->year, s.dob->month, s.dob->day); return 0; } 학번: 20070001 이름: Kim 학점: 4.300000 생년월일: 1980년 3월 20일

[st-pointer.c 실습] #include <stdio.h> struct date { int month; int day; int year; }; struct student { int number; char name[20]; double grade; struct date *dob; int main(void) { struct date d = { 3, 20, 1980 }; struct student s = { 20070001, "Kim", 4.3 }; s.dob = &d; [st-pointer.c 실습]

printf("학번: %d\n", s.number); printf("이름: %s\n", s.name); printf("학점: %f\n", s.grade); printf("생년월일: %d년 %d월 %d일\n", s.dob->year, s.dob->month, s.dob->day); return 0; }

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

구조체를 가리키는 포인터 구조체를 가리키는 포인터 struct student s = { 20070001, "홍길동", 4.3 }; struct student *p; p = &s; printf("학번=%d 이름=%s 학점=%f \n", s.number, s.name, s.grade); printf("학번=%d 이름=%s 학점=%f \n", (*p).number,(*p).name,(*p).grade);

-> 연산자 -> 연산자는 구조체 포인터로 구조체 멤버를 참조할 때 사용 struct student s = { 20070001, "홍길동", 180.2 }; struct student *p; p = &s; printf("학번=%d 이름=%s 키=%f \n", s.number, s.name, s.grade); printf("학번=%d 이름=%s 키=%f \n", (*p).number,(*p).name,(*p).grade); printf("학번=%d 이름=%s 키=%f \n", p->number, p->name, p->grade);

-> 연산자 ==

[pointer_to_st.c 실습] // 포인터를 통한 구조체 참조 #include <stdio.h> struct student { int number; char name[20]; double grade; }; int main(void) { struct student s = { 20070001, "홍길동", 4.3 }; struct student *p; p = &s; printf("학번=%d 이름=%s 학점=%f \n", s.number, s.name, s.grade); printf("학번=%d 이름=%s 학점=%f \n", (*p).number,(*p).name,(*p).grade); printf("학번=%d 이름=%s 학점=%f \n", p->number, p->name, p->grade); return 0; } [pointer_to_st.c 실습]

1.4 구조체와 포인터 (6/15)---[1-18.c 실습] #include<stdio.h> struct student { char no[10]; // 학번 char name[20]; // 이름 double total; // 총점 }; int main(void) struct student stu = {"20101323", "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; }

1.4 구조체와 포인터 (7/15)---[1-19.c 실습(1/2)] #include<stdio.h> struct student { char no[10]; // 학번 char name[20]; // 이름 double total; // 총점 }; int main(void) struct student stu = {"20101323", "Park", 160}; struct student* p=NULL; struct student** pp=NULL;

1.4 구조체와 포인터 (8/15)---[1-19.c 실습(2/2)] 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; }

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

1.4 구조체와 포인터 (9/15) 구조체 내에서 자기 구조체 참조 구조체 내에서 외부 구조체 참조

1.4 구조체와 포인터 (10/15)---[1-20.c 실습(1/2)] #include<stdio.h> 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};

1.4 구조체와 포인터 (11/15)---[1-20.c 실습(2/2)]   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; }

1.4 구조체와 포인터 (12/15)---[1-21.c 실습(1/2)] 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};

1.4 구조체와 포인터 (13/15)---[1-21.c 실습(2/2)] 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);

1.4 구조체와 포인터 (14/15)---[1-22.c 실습(1/2)] #include<stdio.h> 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.4 구조체와 포인터 (15/15)---[1-22.c 분석]

#include <stdio.h> struct student { int number; char name[10]; double grade; struct student *next; }; int main(void) { struct student s1 = { 30, "Kim", 4.3, NULL }; struct student s2 = { 31, "Park", 3.7, NULL }; struct student *first = NULL; struct student *current = NULL; first = &s1; s1.next = &s2; s2.next = NULL; current = first; while( current != NULL ) // 나머지 부분을 완성 하시오.

{ printf("학생의 번호=%d 이름=%s, 성적=%f\n", current->number, current->name, current->grade); current = current->next; }

1.5 구조체와 함수

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

1.5 구조체와 함수 (1/10) 값에 의한 호출(Call by value) 구조체의 복사본이 함수로 전달 된다

1.5 구조체와 함수 (2/10)---[1-23.c 실습] #include<stdio.h> 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 출력

1.5 구조체와 함수 (3/10)---[1-23.c 분석] int main(void) { struct point p = { 10, 20 }; function ( p ); … } p는 call에 복사됨 void function (struct point call) { printf("%d %d \n", call.x, call.y);}

1.5 구조체와 함수 (4/10) 주소에 의한 호출 (call by reference)

1.5 구조체와 함수 (5/10)---[1-24.c 실습] #include<stdio.h> 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);

1.5 구조체와 함수 (6/10)---[1-24.c 분석] int main(void) { struct point p = { 10, 20 }; function ( &p ); … } p의 주소가 포인터 변수 call에 저장 void function (struct point* call) { printf("%d %d \n", call->x, call->y); printf("%d %d \n", (*call).x, (*call).y); }

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

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

1.5 구조체와 함수 (8/10)---[1-25.c 실습] #include<stdio.h> 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 반환

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

1.5 구조체와 함수 (10/10)---[1-26.c 실습] #include<stdio.h> 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의 주소 반환

수고 하셨습니다