C++ 프로그래밍 09 2009년 2학기 전자정보공학대학 컴퓨터공학부.

Slides:



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

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
윤 홍 란 포인터 윤 홍 란
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
23장. 구조체와 사용자 정의 자료형 2.
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
구조체.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
12. 상속 : 고급.
제 6 장 함수(functions).
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 11 구조체.
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
7 생성자 함수.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

C++ 프로그래밍 09 2009년 2학기 전자정보공학대학 컴퓨터공학부

Outline Review: 포인터 배열과 구조체와 포인터

포인터

포인터 (pointer) 포인터: 변수의 위치(주소)를 나타낸다 메모리: 1번지 메모리: 2번지 메모리: 3번지 메모리: 4번지

메모리와 주소 메모리의 주소 = byte 기준 int a; //4byte 변수의 주소: 메모리 내 시작 주소를 의미 000 변수의 주소: 메모리 내 시작 주소를 의미 int a; //4byte 000 001 002 003 004 005 006

& 연산자 &변수이름 변수의 주소를 반환 int a,b; float c; cout<<“a의 주소: ”<<&a<<“\n”; cout<<“b의 주소: ”<<&b<<“\n”; cout<<“c의 주소: ”<<&c<<“\n”;

포인터 (pointer) = 주소 변수의 주소를 저장하는 변수 포인터의 정의 변수형 * 변수이름;

포인터 예제 int a = 123; int * p; p = &a; cout<<“&a = “<<&a<<“\n”; cout<<“p = “<<p<<“\n”; cout<<“&p = “<<&p<<“\n”;

포인터의 잘못된 할당 포인터는 하나의 타입만 가리킬 수 있다. char c; int * p; 포인터는 하나의 타입만 가리킬 수 있다. char c; int * p; p = &c; // WRONG!!! char * p1; p1 = &c; // correct!

포인터를 이용한 정보 추출/변경 포인터가 가리키는 데이터(변수)로의 접근 *포인터이름 int a = 123; 포인터가 가리키는 데이터(변수)로의 접근 *포인터이름 int a = 123; int * p = &a; cout <<“*p = “<<*p<<“\n”; *p = 789; cout <<“a = “<<a<<“\n”;

Pointer의 초기화: NULL 잘못된 pointer의 사용 예: 실수를 피하는 법: NULL (또는 0) 을 활용 int * p; *p = 123; // WRONG!!! int * p = NULL; if(!p) *p = 123; int * p = 0; if(p!=0) *p = 123; int * p = NULL; if(p!=NULL) *p = 123;

Pointer를 쓰는 좋은 습관 포인터 변수는 정의와 함께 항상 NULL로 초기화 int * p = NULL; if(p!=NULL) *p = 123;

배열과 구조체와 포인터

배열과 포인터 일반적인 변수에서의 포인터와 거의 같다. int arrays[10]; int * p = &arrays[5];

6번째 변수는? pointer p가 array[5]를 가리키고 있을 때: p = &array[6]; p = p + 1;

포인터에 정수를 더하기/빼기 배열을 가리키는 포인터에 정수를 더하는/빼는 것은 원소의 개수만큼 이동하는 것을 의미! -1 +1

포인터간의 뺄셈 주소의 차가 아닌 사이의 원소의 개수가 나온다 int array[10]; int * p1 = array[5]; cout<<“p1=“<<p1<<“\n”; cout<<“p2=“<<p2<<“\n”; cout<<“p2-p1=“<<p2-p1<<“\n”;

포인터로 원소 탐색하기 int array[10]; int * p = array[0]; for(int i=0; i<10; i++) *(p+i) = i; 연습: int i 없이 똑같은 일을 수행하도록 변경 for문을 사용한다. 사용하는 변수는 array와 p 만 사용

배열의 특정 원소를 가리키기 int array[10]; int * p = array[0]; 5번째 원소는? array[5]; 배열의 이름은 첫번째 원소를 가리키는 상수 포인터

포인터의 배열 포인터를 원소로 갖는 배열을 정의할 수 있다 변수형 *포인터이름[원소개수]; 예제) int * pArray[3];

포인터 배열의 사용 예 double a,b,c; a=132; b=124; c=116; double *pArray[3]; pArray[0] = &a; pArray[1] = &b; pArray[2] = &c;

연습 정수 배열 array[10]을 만들고 array[0] = 0, array[1]=1, array[2]=2, …. 가 되도록 for문을 사용하여 값을 채우라 정수 pointer 배열 pArray[10]을 만들고, pArray[0] = &array[9], pArray[1] = &array[8], pArray[2] = &array[7], … 가 되도록 for문을 사용하여 값을 채우라 pArray를 이용하여 array의 내용을 뒤에서 부터 출력

구조체의 배열 구조체를 배열로 쓸 수 있다. struct student { char name[20]; int number; float grade[2]; }; student stdArray[3];

구조체의 배열의 초기화 struct student { char name[20]; int number; float grade[2]; }; student stdArray[3] = {“Kim Chol-Su”,2002132,{3.5,4.3}}, {“Kim Mi-ja”,2002132,{3.5,4.3}}, {“Son o-gong”,2002132,{3.5,4.3}}

구조체를 가리키는 포인터 구조체를 변수형처럼 사용해서 포인터를 정의 할 수 있다 struct rectangle { int x,y; int width, height; }; rectangle rc; rectangle * p = &rc;

구조체의 맴버 변수 접근 구조체변수.맴버변수 구조체에서는: 구조체포인터는: (*구조체포인터).맴버변수 구조체포인터->맴버변수 구조체포인터->맴버변수

구조체의 맴버 변수 접근 예 struct rectangle { int x,y; int width, height; }; rectangle rc; rectangle * p = &rc; rc.x=10; (*p).x = 10; p->x = 10; 모두 같다

구조체와 포인터 구조체 내에 포인터를 맴버로 가질 수 있다 struct IHavePointer { int a; int * p; };

구조체를 가리키는 맴버 포인터 구조체를 가리키는 포인터를 맴버로 가질 수 있다 struct test { int a; test * p; };

구조체를 가리키는 맴버 포인터 struct test { int a; test * p; }; test ts; ts.a=20; ts.p=&ts; cout<<“ts.a:”<<ts.a<<“\n”; cout<<“ts.p->a:”<<ts.p->a<<“\n”; cout<<“ts.p->p->a:”<<ts.p->p->a<<“\n”;

구조체를 가리키는 맴버 포인터 struct Dizzy { int id; Dizzy * p; }; Dizzy a,b,c; a.id = 1; a.p=&b; b.id = 2; b.p=&c; c.id = 3; c.p=&a; cout<<“a.id:”<<a.id<<“\n”; cout<<“b.id:”<<a.p->id<<“\n”; cout<<“c.id:”<<a.p->p->id<<“\n”;

구조체를 가리키는 맴버 포인터

함수1

함수 코드를 정리하고 정돈한다!  사후관리용이

함수란 작은 프로그램 (subprogram)

함수를 쓰는 이유 프로그램 작성 용이 절차의 추상화 일을 여러 단계의 작은 일로 쪼개는 것 Procedural Abstraction 일을 여러 단계의 작은 일로 쪼개는 것 Divide-and-conquer 반복적인 일의 수행 시 소스코드의 크기를 줄여준다

함수의 모양 초등학교 산수시간에… ?

y = f(x) 함수의 모양 고등학교 수학시간에… x: 함수의 인자 (parameter) f(): 함수 본체(body) y: 함수의 결과값 (반환값:return value)

함수의 모양 함수의 정의: 반환변수형 함수이름(인자1, 인자2,…) { 함수 내용; return 반환값; }

함수의 호출 인자(parameter)의 형태 및 개수가 함수의 정의와 같아야 한다. 함수이름(인자1, 인자2,…);

함수의 가장 간단한 모양 함수의 정의-인자와 반환값이 없을 경우: void 함수이름() { 함수 내용; }

간단한 함수 예제 #include <iostream> using namespace std; void printMessage() { cout<<“My first function! \n”; } int main() printMessage(); return 0;

함수의 연습 인자 n을 받아서 “*”을 n개 만큼 출력하는 함수를 만들어라. example) n=5인 경우 ***** 이 함수를 이용하여 다음과 같은 삼각형을 출력! * ** *** **** *****