자료 구조: Chapter 3 (2)구조체, 포인터

Slides:



Advertisements
Similar presentations
11 주차 : Structures and Unions. 2 Introduction structure 는 다른 타입들의 변수를 모은 타입이며 그 타입들을 structure 의 멤버 라 한다. union 은 다른 타입의 여러 변수들을 하나 의 기억 장소에 보관함으로써 한.
Advertisements

슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
Power C++ 제6장 포인터와 문자열.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
배열, 포인터 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
제 8 장  파서 생성기 YACC 사용하기.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
제 2 장 배열과 스트링.
시스템 생명 주기(System Life Cycle)(1/2)
Part 12 구조체와 공용체 ©우균, 창병모 ©우균, 창병모.
구조체 활용 구조체 활용.
8. 객체와 클래스 (기본).
Internet Computing KUT Youn-Hee Han
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
Chapter 03 배열, 구조체, 포인터.
시스템 생명 주기(System Life Cycle)(1/2)
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
구조체 struct 구조체와 함수 구조체의 배열, sizeof 연산자 열거형 enum 형 정의 typedef
연결리스트 (Linked List) 충북대학교 컴퓨터공학과 서 영 훈.
자료 구조: Chapter 3 (2)구조체, 포인터
6장. printf와 scanf 함수에 대한 고찰
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
CHAP 3:배열, 구조체, 포인터.
제 3 장. 배열과 구조체 및 포인터.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
head data link data link data link NULL a b c
8장 포인터.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
25장. 메모리 관리와 동적 할당.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
[INA240] Data Structures and Practice
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
Dynamic Memory and Linked List
Chapter 2:: Array, Structure, and Pointer
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
14주차.
제 3 장 상수와 변수
5장. 상수와 기본 자료형. 5장. 상수와 기본 자료형 5-1 C 언어가 제공하는 기본 자료형 자료형(data type) 기본 자료형 사용자 정의 자료형 int val; "선언할 변수의 특징을 나타내기 위한 키워드" 기본 자료형 기본적으로 제공이 되는 자료형 사용자.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
제 8장 구조체 Hello!! C 언어 강성호 김학배 최우영.
Byte Alignment ㈜ 웰컴정보시스템 김 정 은.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 22. 구조체와 사용자 정의 자료형1.
자료구조 (Data Structure).
자바 5.0 프로그래밍.
토론을 위한 질문 배열의 이름에는 무엇이 저장되는가? C언어에서 배열 추상데이터의 store는 어떻게 구현 되는가?
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
제 8 장 포인터.
Structures Summary.
9주차: Using Files and Others
17장. 포인터의 포인터.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
3b장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
Presentation transcript:

자료 구조: Chapter 3 (2)구조체, 포인터 2016. 3. 31 순천향대학교 컴퓨터공학과 하 상 호

3장 목차 배열 구조체 포인터

구조체 구조체(structure): 타입이 다를 수 있는 데이터를 하나로 묶는 방법 배열(array): 타입이 같은 데이터들을 하나로 묶는 방법 구조체 배열 필드 1 char carray[100]; struct example { char cfield; int ifield; float ffield; double dfield; }; struct example s1;

구조체 선언 구조체의 선언과 구조체 변수의 생성 typedef을 이용하여 구조체에 다른 타입 이름 부여 struct person { char name[10]; // 문자배열로 된 이름 int age; // 나이를 나타내는 정수값 float height; // 키를 나타내는 실수값 }; struct person student; // 구조체 변수 선언 typedef을 이용하여 구조체에 다른 타입 이름 부여 typedef struct person { // typedef는 다른 타입 이름 부여 char name[10]; int age; float height; } person; person student; // 구조체 변수 선언

구조체 배정과 비교 연산 구조체의 배정은? 구조체 비교는? struct person { char name[10]; // 문자배열로 된 이름 int age; // 나이를 나타내는 정수값 float height; // 키를 나타내는 실수값 }; main() { person a, b; b = a; // ? } 구조체 비교는? main() { if( a > b ) printf("a가 b보다 나이가 많음"); // ? }

자체참조 구조체 자체 참조 구조체(self-referential structure): 필드중에 자기 자신을 가리키는 포인터가 한 개 이상 존재하는 구조체 연결 리스트나 트리에 많이 등장 struct ListNode { char data; struct ListNode *link; };

C의 포인터(pointer) 포인터: 다른 변수의 주소를 가지고 있는 변수 포인터가 가리키는 내용의 변경: * 연산자 사용 26 ‘A’ 변수 a 주소 포인터 p 포인터: 다른 변수의 주소를 가지고 있는 변수 char a='A'; char *p; p = &a; 포인터가 가리키는 내용의 변경: * 연산자 사용 26 ‘B’ 변수 a 주소 포인터 p *p= 'B';

C의 포인터(pointer) 다음 C 코드의 각 문장 의미는 무엇인가? int a = 10, *q, *r; // a) q = &a; // b) *r = *q; // c) printf(“%p\t%d”, r, *r); // d)

포인터와 관련된 연산자 26 ‘A’ 변수 a 포인터 p &a *p & 연산자: 변수의 주소를 추출 * 연산자: 포인터가 가리키는 곳의 내용을 추출 int a; // 정수 변수 선언 int *p; // 정수 포인터 선언 int **pp; // 정수 포인터의 포인터 선언 p = &a; // 변수 a와 포인터 p를 연결 pp = &p; // 포인터 p와 포인터의 포인터 pp를 연결

배열과 포인터 배열의 이름은 상수 포인터 배열 이름에는 첫번째 요소의 주소가 포함되나 다른 주소를 할당 받을 수 없음 a ≡ &a[0] 10 A[0] A 14 A[1] 18 A[2] 22 A[3] 26 A[4] 30 A[5]

포인터와 증감연산자 배열과 연관되어 사용 연산자 우선순위: () [] -> . // left to right ! ++ -- * & // right to left p // 포인터 *p // p가 가리키는 값 *p++ // ≡ *(p++): p가 가리키는 위치를 가져오고(다음에 p는 한 칸 증가한다), //그 위치에 포함된 값을 반환. *p-- // ≡ *(p--): p가 가리키는 위치를 가져오고(다음에 p는 한 칸 감소한다), //그 위치에 포함된 값을 반환. (*p)++ // p가 가리키는 값을 가져오고, 다음에 그 값을 증가시킨다. *++p // ≡ *(++p): p를 한 칸 증가하고, 증가된 p가 가리키는 값을 가져온다 *--p // ? ++*p // ≡ ++(*p): p가 가리키는 값을 가져오고, 그 값을 증가하고, // 그 증가된 값을 가져온다. --*p // ?

포인터와 증감연산자 printf(“%The address stored in p is %p\n”, p); printf(“%The address pointed by p+1 is %p\n”, p+1); printf(“%The address pointed by p-3 is %p\n”, p -3); printf(“%d\n”, *p); Printf(“%d\n”, *(p-3)); printf(“%d\n”, *p++); printf(“%d\n”, *p--); printf(“%d\n”, *++p); printf(“%d\n”, *--p);

Test 다음 코드에서 출력은 무엇인가? int a[] = {1,2,3,4,5,6,7,8,9,10}; int *p; p = a + 3; printf("%d \n", *p); printf("%d \n", *p++); printf("%d\n", *++p); printf("%d\n", *p); int a[] = {1,2,3,4,5,6,7,8,9,10}; int *p; p = a + 3; printf("%d \n", *p); printf("%d \n", (*p)++); printf("%d\n", *++p); printf("%d\n", *p);

Test 다음 코드에서 출력은 무엇인가? int a[] = {10,20,30,40,50,60,70,80,90,100}; int *p; p = a + 5; printf("%d %p\n", *p, p); printf("%d %p\n", *p++, p); printf("%d\n", *++p); printf("%d\n", *p); printf("%d %p\n", *p--, p); printf("%d\n", *--p); printf("%d\n", ++*p); printf("%d\n", --*p);

구조체의 포인터 구조체의 요소에 접근하는 연산자: -> main() { struct { int i; float f; } s, *ps; ps = &s; ps->i = 2; // (*ps).i = 2; ps->f = 3.14; } 3.14 98 2 ps s s.I = ps->i s.f = ps->f

포인터 용도: 참조-호출 표현 함수의 매개변수를 포인터로 전달 void swap(int *px, int *py) { int tmp; tmp = *px; *px = *py; *py = tmp; } main() int a=1,b=2; printf("swap을 호출하기 전: a=%d, b=%d\n", a,b); swap(&a, &b); printf("swap을 호출한 다음: a=%d, b=%d\n", a,b);

포인터 용도: 동적 메모리 할당 전형적인 동적 메모리 할당 코드 동적 메모리 할당 관련 라이브러리 함수 main() { int *pi; pi = (int *)malloc(sizeof(int)); // 동적 메모리 할당 ... … // 동적 메모리 사용 free(pi); // 동적 메모리 반납 } 동적 메모리 할당 관련 라이브러리 함수 void * malloc(size_t size) // 메모리 할당 free(void * ptr) // ptr이 가리키는 메모리 반환 sizeof(var) // 변수나 타입의 크기 반환(바이트 단위) stdlib.h 상에 정의

동적 메모리 할당 예제 struct exRec { int number; char name[10]; }; void main() struct exRec *p; p=(struct exRec *)malloc(2*sizeof(struct exRec)); // ? if(p==NULL){ fprintf(stderr, "can't allocate memory\n") ; exit(1) ; } p->number=1; //? strcpy(p->name,"Park"); (p+1)->number=2; //? strcpy((p+1)->name,"Kim"); //? // 2개의 레코드를 출력하라. // … ?? free(p);

동적 자료구조 동적 메모리 할당을 통해서 동적으로 생성되는 자료구조 다음의 구조체를 3개 생성하여 한 줄로 연결하라. 10 struct linkedNum { int val; struct linkedNum *next; } val next 10 20 30

예제: 동적 자료구조 30 20 10 struct linkedNum{ int val; struct linkedNum *next; }; int main() { struct linkedNum first; // 리스트를 가리키는 포인터 변수 struct linkedNum n1, n2, n3; // 리스트를 구성하라. // 리스트를 출력하라 (while 문을 이용하라) } first n1 n2 n3 30 20 10