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

Slides:



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

1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
포인터란? 사전적 의미로써 지시자 혹은 가리키는 것으로 풀이할 수 있으나, C프로그래밍 언어에서는 메모리의 주소를 저장하는 변수이다. 포인터 자체가 하나의 변수이기 때문에 포인터도 메모리 내에서 선언이 되며 일반 상수를 저장하는 변수가 아닌 주소값을 저장하는 변수라는 점에서.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제14장 동적 메모리.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
연결리스트(linked list).
제 9 장 구조체와 공용체.
제 2 장 배열과 스트링.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
윤 홍 란 포인터 윤 홍 란
Chapter 03 배열, 구조체, 포인터.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
CHAP 3:배열, 구조체, 포인터.
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
자료 구조: Chapter 3 (2)구조체, 포인터
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Chapter 10 Pointer Applications.
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Chapter 2:: Array, Structure, and Pointer
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
13. 연산자 오버로딩.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
8주차: Strings, Arrays and Pointers
제 6 장 함수(functions).
토론을 위한 질문 배열의 이름에는 무엇이 저장되는가? C언어에서 배열 추상데이터의 store는 어떻게 구현 되는가?
7주차: Functions and Arrays
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 11 구조체.
제 4 장 Record.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

자료 구조: Chapter 3 (2)구조체, 포인터 2017. 3. 28 하 상 호

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) 포인터: 다른 변수의 주소를 가지고 있는 변수 주소 변수 a 포인터 p char a='A'; 26 ‘A’ 변수 a 주소 포인터 p 포인터: 다른 변수의 주소를 가지고 있는 변수 char a='A'; char *p; p = &a;

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);

구조체의 포인터 구조체의 요소에 접근하는 연산자: -> 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