Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "C++ 프로그래밍 09 2009년 2학기 전자정보공학대학 컴퓨터공학부."— Presentation transcript:

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

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

3 포인터

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

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

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

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

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

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

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

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

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

13 배열과 구조체와 포인터

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

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

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

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

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

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

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

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

22 연습 정수 배열 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의 내용을 뒤에서 부터 출력

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

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

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

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

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

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

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

30 구조체를 가리키는 맴버 포인터 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”;

31 구조체를 가리키는 맴버 포인터 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”;

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

33 함수1

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

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

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

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

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

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

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

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

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

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


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

Similar presentations


Ads by Google