설계란 무엇인가?

Similar documents
설계란 무엇인가?

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

슬라이드 1

PowerPoint 프레젠테이션

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

11장 포인터

금오공대 컴퓨터공학전공 강의자료

C++ Programming

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

PowerPoint Template

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - [2009] 02.pptx

설계란 무엇인가?

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - chap10-함수의활용.pptx

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap-11.pptx

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - 제11장 포인터(강의)

02장.배열과 클래스

Microsoft PowerPoint - 제11장 포인터

KNK_C_05_Pointers_Arrays_structures_summary_v02

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap06-2pointer.ppt

설계란 무엇인가?

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

11장 포인터

C프로-3장c03逞풚

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - chap06-4 [호환 모드]

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Data Structure

Microsoft PowerPoint - 10장 문자열 pptx

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint - additional01.ppt [호환 모드]

설계란 무엇인가?

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - 제9강 문자열

슬라이드 1

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

설계란 무엇인가?

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - Chapter_07.pptx

11장 포인터

쉽게 풀어쓴 C 프로그래밍

13 주차문자열의표현과입출력

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

8장. 포인터

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

untitled

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

C++ Programming

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

PowerPoint Presentation

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Presentation

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft PowerPoint - C_9장 포인터 pptx

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

Data Structure

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint Template

Microsoft PowerPoint - 7장 배열 pptx

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

Infinity(∞) Strategy

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - 7_배열_문자열

YRRZBRRLMCEQ.hwp

1. 인라인함수 예 : x, y 값중최소값을반환하는매크로와함수작성 // 매크로로구현한경우 #define MIN(X, Y) ((X) < (Y)? (X) : (Y)) X, Y 각각을괄호 ( ) 안에넣는이유는? // 함수로구현한경우 cout << MIN(4, 5) << en

Microsoft PowerPoint - chap06-8.ppt

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap06-8 [호환 모드]

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

C 프로그래밊 개요

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Transcription:

금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하

5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20

5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9] for (int i = 0; i < 10; i++) cout << " 정수입력 : "; cin >> Ary[i]; 변수인덱스를통해해당원소접근가능 for (int i = 0; i < 10; i++) cout << "Ary[" << i << "] = " << Ary[i] << endl; 2 /20

5 강. 배열, 포인터, 참조배열 2 차원배열, 3 차원배열, int Ary[3][4]; Ary[0][0] Ary[0][1] Ary[0][2] Ary[0][3] Ary[1][0] Ary[1][1] Ary[1][2] Ary[1][3] Ary[2][0] Ary[2][1] Ary[2][2] Ary[2][3] Ary[0][0] ~ Ary[2][3] 의총 12개의 int형변수가생김 Ary[1][2] 와같이각원소에접근가능 다차원배열의사용방법동일 배열선언및초기화 int Ary1[5] = 1, 2, 3, 4, 5 ; int Ary2[5] = 1, 2 ; int Ary3[2][3] = 1, 2, 3, 4, 5, 6 ; int Ary4[2][3] = 1, 4, 5 ; int Ary5[2][3] = 1, 2 ; 나머지는 0 으로자동초기화 3 /20

하나의프로그램실행 ( 프로세스 ) 시생성되는메모리 구조 메모리구조 int a = 1; 데이터영역 ( 전역, 정적변수 : a, c) 스택영역 ( 지역변수 : x, y, b, p) 힙영역 ( 동적변수 : new int) 코드영역 ( 함수 : Sum, main) int Sum(int x, int y) static int c; c = x + y; return c; int b = 2; int *p = new int(3); 결론 : 변수와함수모두 메모리에올라감 cout << Sum(b, *p) << endl; 4 /20 delete p;

메모리주소 주소 : 바이트단위의번호, 4바이트로표현 0번지 ~ 2 32-1번지 변수, 함수는메모리를차지함 배열은연속적인메모리공간을차지함 5 /20

변수와함수가올라가있는메모리주소값알아내기 변수 : 주소연산자 (&) 사용 함수 : 함수명자체가주소값을의미 int Sum(int x, int y) return (x + y); int Num1 = 3; Num1 변수의주소 6 /20 cout << "Num1 변수의주소 : " << &Num1 << endl; cout << "main 함수의주소 : " << main << endl; cout << "Sum 함수의주소 : " << Sum << endl;

포인터 ( 변수 ) 주소값을저장하는변수 주소값에도타입이있음 int a; &a int형주소값 double b; &b double형주소값 int형포인터 == int형주소값을저장하는변수 int *p; 포인터도변수다! 7 /20

역참조연산 (*) int a = 3; int *p = &a; *p = 5; 역참조연산 : 현재포인터가가리키는변수를의미 : *p == a 포인터연산 덧셈, 뺄셈만가능 : +, -, ++, -- int *p = &a; p = p + 1; int 타입의크기인 4만큼증가 다음 int 변수를가리키는모양 8 /20

다음프로그램의출력결과는? Num1 의주소는 1000 번지, pnum 의주소는 2000 번지로가정 int Num1 = 3; int *pnum = &Num1; *pnum Num1 2000 1000 3 1000 9 /20 cout << Num1 << endl; cout << &Num1 << endl; cout << pnum << endl; cout << &pnum << endl; *pnum = 5; pnum++; cout << Num1 << endl; cout << &Num1 << endl; cout << pnum << endl; cout << &pnum << endl; 실행결과 3 1000 1000 2000 5 1000 1004 2000

배열이름 첫번째원소의주소를의미하는상수 int Ary[5]; Ary == &Ary[0] int Ary[5]= 1, 2, 3, 4, 5 ; int *p = Ary; 첫번째원소를가리킴 for (int i = 0; i < 5; i++) cout << *p << endl; p++; 다음원소를가리킴 10 /20

배열은포인터처럼, 포인터는배열처럼사용가능! 단, 배열명은상수이므로변경불가 int Ary[5]= 1, 2, 3, 4, 5 ; int *p = Ary; for (int i = 0; i < 5; i++) 포인터를배열처럼사용 cout << p[i] << " "; p[i] == *(p + i) cout << *(Ary + i) << endl; 배열을포인터처럼사용 *(Ary + i) == Ary[i] 11 /20

다차원배열명의의미 첫번째원소의주소! int Ary[2][3]; Ary == &Ary[0], int (*p)[3] = Ary; p++ 12만큼증가 (int [3] 단위 ) P[0][2] 와같이 2차원배열처럼사용가능 int Ary[2][3][4]; Ary == &Ary[0], int (*p)[3][4] = Ary; 복잡한포인터 Ary[0] Ary[0][0] Ary[0][1] Ary[0][2] Ary[1] Ary[1][0] Ary[1][1] Ary[1][2] int **p; 포인터에대한포인터 int *p[3]; int 포인터 3개를원소로배열 int (*p)[3]; int [3] 배열단위로가리키는포인터 해석요령 : pointer of array [3] of int int 형1차원배열 ([3]) 에대한포인터 12 /20

int Ary[3][4] 가있다. Ary[2][3] = 5; 와동일한의미가되도록 Ary를포인터방식으로사용해보라. *(*(Ary + 2) + 3) = 5; *(Ary[2] + 3) = 5; (*(Ary + 2))[3] = 5; 다음각변수가무엇을뜻하는지말해보라. int **a[3]; int (*b)[3][4]; int *(*c)[3]; int 포인터의포인터를원소로갖는 1 차원배열 [3] 2 차원배열 [3][4] 에대한포인터 int 포인터를원소갖는 1 차원배열 [3] 에대한포인터 13 /20

14 /20 메모리동적할당 메모리가필요할때변수를사용하지않고동적으로할당 받음 포인터변수를통해가리키고사용함 new( 메모리할당 ) 와 delete( 해제 ) int *p; int 1개 (4바이트) 할당 p = new int; *p = 5; cout << *p << endl; delete p; 동적메모리해제 p = new int[5]; int 5개 (20바이트) 할당배열 for (int i = 0; i < 5; i++) p[i] = i + 1; cout << p[i] << " "; delete [] p; 배열로할당받은경우반드시 [] 사용

5 강. 배열, 포인터, 참조문자열 15 /20 문자열표현방식 char 문자의집합 단, 마지막문자로널문자 ( \0 ) 포함 문자열의저장 문자열상수 : char * 로가리킬수있음, 불변 문자열변수 : 1 차원배열 char str1[6] = "Hello"; char *str2 = "Hello"; cout << str1 << endl; cout << str2 << endl; str2 * str1 Hello H e l l o str1[0] str1[1] \0 H e l l o \0 H e l l o \0

5 강. 배열, 포인터, 참조문자열 문자열변수에대한조작함수사용 헤더파일 : <cstring> strlen : 문자열의길이 strcpy : 문자열복사 strcat : 문자열뒤에추가 strcmp : 문자열비교 char str1[255] = "C++ "; char str2[255] = "Programming"; char str3[255]; strcat(str1, str2); strcpy(str3, str1); cout << "str1 : " << str1 << endl; cout << "str2 : " << str2 << endl; cout << "str3 : " << str3 << endl; if (strcmp(str1, str3) == 0) cout << "Str1 과 Str3 은같다." << endl; 16 /20 같으면 0, str1 이크면양수 Str3 이크면음수반환 cout << "str1 의길이 : " << strlen(str1) << end

5 강. 배열, 포인터, 참조참조 참조변수 기존변수 ( 변수하나 ) 의또다른이름 혼자존재할수없음 선언과동시에초기화필수 초기화이후에는일반변수와 100% 동일하게사용! int Num1 = 3; int &Num2 = Num1; Num2 = 5; 참조변수 Num2는 Num1과동일 이후 Num2는일반변수와동일함 ( 사용방법등 ) cout << Num1 << endl; cout << Num2 << endl; 17 /20

5 강. 배열, 포인터, 참조참조 참조변수의예 a, b, c 모두동일 int a; int &b = a; int &c = b; c = 5; 포인터변수 p, q 동일 int *p = &a; int *&q = p; *q = 7; int ary[3]; 배열 ary와 raray int (&rary)[3] = ary; 동일 rary[1] = 3; 18 /20

5 강. 배열, 포인터, 참조프로그래밍연습 사용자로부터행과열의개수를입력받아해당행- 열을갖는 2차원배열을만들고 0 또는 1 중임의의값으로채운후출력해보라. int ** 변수를사용하여행의개수만큼 int * 변수를만들고 각 int * 변수를사용하여열의개수만큼만든다. 그다음부터는 int ** 변수를 2차원배열과동일하게사용하면된다. 19 /20

5 강. 배열, 포인터, 참조프로그래밍연습 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; srand(time(null)); int **Ary; int row, col; 각각의 int * 를이용해 int 배열생성 int ** 를 2 차원 배열처럼사용 메모리해제 cout << " 행과열의개수입력 : "; cin >> row >> col; Ary = new int *[row]; for (int i = 0; i < row; i++) Ary[i] = new int[col]; for (int i = 0; i < row; i++) for (int j = 0; j < col; j++) Ary[i][j] = rand() % 2; cout << Ary[i][j] << " "; cout << endl; for (int i = 0; i < row; i++) delete [] Ary[i]; delete [] Ary; int * 배열생성 20 /20