배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..

Slides:



Advertisements
Similar presentations
Vision System Lab, Sang-Hun Han
Advertisements

명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
Java Presentation 중간 시험2 풀이
제 8 장  파서 생성기 YACC 사용하기.
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
10장 예외 처리 프로그래밍 언어론 10.6 Pascal과 C의 에러 처리 10.1 설계 주제 10.2 PL/I의 예외 처리
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
8. 객체와 클래스 (기본).
시스템 생명 주기(System Life Cycle)(1/2)
7 스택.
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
서울 메트로 노조파업 수강과목 : 노사 관계론 담당교수 : 정형진 교수님
C++ Espresso 제6장 생성자와 소멸자.
자료구조 김현성.
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
7장 클래스.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
프로그래밍2 및 실습 C언어 기반의 C++ 2.
스택(Stack) 김진수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
5 FLOWCHAT 순서도 순서도의 기호 익히기.
행정학과 김수민 중국 춘절의 교통문제.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Chapter 3 클래스. 최호성.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
수학8가 대한 92~95 쪽 Ⅳ. 연립방정식 1. 연립방정식과 그 풀이 및 활용 >끝내기전에(9/9) 끝내기 전에.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
A Basic of C++.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
자바 5.0 프로그래밍.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
argc, argv 의 사용방법 #include <stdio.h>
17장. 포인터의 포인터.
C.
C++ 언어의 특징
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다.

이 장에서 다룰 내용 배열 1 포인터 2 new와 delete 3 참조 4 5 포인터와 참조의 확장

01_배열 배열 배열의 기본형태와 사용 예 변수들의 묶음 Index를 이용해서 접근 가능 배열형 배열명[배열크기]; 배열형 배열명[배열크기] = {초기화}; [기본 형태] int Number[3]; int Number[4] = {"ABCD"} ; [사용 예]

01_배열 배열의 사용 배열 사용의 기본형태와 사용 예 색인번호(Index)를 이용해서 사용 색인번호는 0 부터 시작 변수의 사용과 크게 다르지 않음 배열 사용의 기본형태와 사용 예 배열명[색인번호] = 값; 변수명 = 배열명[색인번호]; 배열명[색인번호] = 변수명; 배열명[색인번호1] = 배열명[색인번호2]; [기본 형태] Number[1] = 80; Num = Number[1]; Number[1] = Num; Number[10] = Number[20]; [사용 예]

01_배열 배열명 ‘배열형’은 변수형처럼 기본적인 형(primitive type)이 올 수도 있고, 구조체나 클래스와 같은사용자 정의형이 올 수도 있다.‘ 배열명’은 변수명과 같은 제약사항이 있으므로 배열명을 정할때에는 제약사항을 고려하여 이름을 붙여야 한다. 배열명 사용 예 적용 비고 Number int Number[10]; ○ int형 변수 10개를 가진 배열이다. Name char Name[8]; char형 변수 8개를 가진 배열이다. LargeNumber double LargeNumber[3] = { 1000, 2000, 3000 }; double형 변수 3개에 각각의 값을 입력한 배열이다. 1stArray char 1stArray × 배열 크기를 정하지 않았다. zeroArray int zeroArray[0]; 크기가 0인 배열은 있을 수 없다.

색인번호를 이용해서 3개의 숫자를 차례로 입력한다. [기본예제 8-1] 배열의 사용 01 #include<iostream.h> 02 03 void main() 04 { 05 06 int Number[3]; 07 08 char MyName[8] = { "ABCDEFG" }; 09 10 Number[0] = 50; 11 Number[1] = 80; 12 Number[2] = 90; 13 14 cout << "Number has 3 numbers : " << Number[0] << ", "; 15 cout << Number[1] << ", " << Number[2] << '\n'; 16 17 cout << "MyName 8 characters : " ; 18 for(int i = 0; i < 8; i++) 19 cout << "MyName[ " << i << " ] = " << MyName[i] << '\n'; 20 21 cout << '\n'; 22 23 if (MyName[7] == '\0') 24 cout << "MyName's 8th character = \\0" << '\n'; 25 } 3개의 int값을 가질 수 있는 배열형 변수 Number를 선언한다. 8개의 문자를 가질 수 있는 배열형 변수 MyName을 선언하고 초기화한다 색인번호를 이용해서 3개의 숫자를 차례로 입력한다. 출력을 통해서 3개의 숫자가 제대로 입력되었는지 확인한다. 마지막 문자를 확인하기 위한 코드다.

[기본예제 8-2] 객체 배열의 사용 - 1 01 #include <iostream.h> 02 03 class Unit 04 { 05 06 private: 07 int x; 08 int y; 09 10 public: 11 Unit(int i, int j) 12 { 13 x=i; 14 y=j; 15 }; 16 17 void Print() 18 { 19 cout << x << ", " << y << "\n"; 20 }; 21 }; 배열을 만들 Unit 클래스를 선언한다.

[기본예제 8-2] 객체 배열의 사용 - 2 22 23 int main(int argc, char* argv[ ]) 24 { 25 Unit aUnit[2] = { 26 Unit(1,2), 27 Unit(3,4) 28 }; 29 30 for (int i = 0; i < 2; i++) 31 { 32 cout << "aUnit[ " << i << " ] = "; 33 aUnit[i].Print(); 34 } 35 36 return 0; 37 38 } 두 개의 Unit 변수를 가지는 배열형 변수 aUnit을 선언한다.

02_포인터 포인터 this 포인터의 기본형태와 사용 예 포인터형* 변수형; 포인터형* 변수명 = 초기화; 포인터는 지정된 메모리 공간을 가리킴 &, * 연산자를 사용 this 동일한 클래스내의 맴버 함수들에 자동으로 전달되는 포인터이자, 호출한 객체를 가리키는 포인터 포인터의 기본형태와 사용 예 포인터형* 변수형; 포인터형* 변수명 = 초기화; [기본 형태] int* number; int* number = NULL; [사용 예]

[기본예제 8-4] 포인터형 변수의 사용 01 #include<iostream.h> 02 03 void main() 04 { 05 06 int number = 45; 07 int* pNumber = NULL; 08 09 pNumber = &number; 10 11 cout << "Address of Number = " << pNumber << '\n'; 12 cout << "Value of Number = " << *pNumber << '\n'; 13 } int형 변수를 선언하고, 45의 값을 입력한다. int 포인터형 변수를 선언하고, NULL로 값을 초기화한다. 역참조를 통해 number의 값을 출력한다.

[기본예제 8-5] 객체 포인터의 사용 - 1 01 #include <iostream.h> 02 03 class Unit 04 { 05 06 private: 07 int x; 08 int y; 09 10 public: 11 Unit(int i, int j) 12 { 13 x=i; 14 y=j; 15 } 16 17 void Print() 18 { 19 cout << x << ", " << y << "\n"; 20 } 21 22 }; 23 Unit class를 선언한다.

[기본예제 8-5] 객체 포인터의 사용 - 2 Unit 포인터형 변수에 배열의 시작 주소를 입력한다 24 int main(int argc, char* argv[ ]) 25 { 26 27 Unit aUnit[2] = { 28 Unit(1,2), 29 Unit(3,4) 30 }; 31 32 int i; 33 34 Unit* pUnit = aUnit; 35 36 cout << "Using '->' operator\n"; 37 for (i=0; i<2; i++) 38 { 39 pUnit->Print(); 40 pUnit++; 41 } 42 43 pUnit = aUnit; 44 45 cout << "Using '.' operator\n"; 46 for (i=0; i<2; i++) 47 { 48 (*pUnit).Print(); 49 pUnit++; 50 } 51 52 return 0; 53 } Unit 포인터형 변수에 배열의 시작 주소를 입력한다 pUnit은 포인터이므로 객체포인터를 참조하기 위해 화살표(->) 연산자를 사용한다. pUnit를 역참조하여, Unit 객체를 얻어 오기 위해 도트(.) 연산자를 사용한다.

03_new와 delete 동적 생성 new / delete new / delete 의 기본형태와 사용 예 런타임(runtime)시 그 값이 결정 new / delete 동적으로 메모리를 할당 / 해제 하는데 사용 new / delete 의 기본형태와 사용 예 객체형*객체명 = new 객체형(); 변수형*변수명 = new 변수형[변수 크기]; delete 객체명; delete[ ] 변수명; [기본 형태] Unit* pUnit = new Unit(1,2); int*plnteger = new int[10]; delete Unit; delete[ ] plnteger; [사용 예]

[기본예제 8-6] 포인터형 변수의 사용 01 #include <iostream.h> 02 03 int main(int argc, char* argv[ ]) 04 { 05 int *pInteger=NULL; 06 07 pInteger = new int; 08 09 if (!pInteger) 10 { 11 cout << "Allocation Fail...\n"; 12 return -1; 13 } 14 15 *pInteger = 777; 16 cout << "pInteger = " << *pInteger << "\n"; 17 18 delete pInteger; 19 20 return 0; 21 } int형 크기만큼 할당한다. 초기화가 되어 있는지의 여부를 검사한다. pInteger는 포인터형 변수므로 실제값을 입력하기 위해서 역참조한다. new로 할당한 메모리는 다 쓰고 꼭 delete 해줘야 한다.

[기본예제 8-7] Unit 객체의 동적 생성 - 1 01 #include <iostream.h> 02 03 class Unit 04 { 05 06 private: 07 int x; 08 int y; 09 10 public: 11 Unit(int x, int y) 12 { 13 this->x=x; 14 this->y=y; 15 } 16 매개변수와 멤버변수를 구분하기 위해 this 포인터를 명시한다.

[기본예제 8-7] Unit 객체의 동적 생성 - 2 17 void Print() 18 { 18 { 19 cout << x << ", " << y << "\n"; 20 } 21 22 }; 23 24 int main(int argc, char* argv[ ]) 25 { 26 Unit* pUnit = new Unit(1,2); 27 pUnit->Print(); 28 29 delete pUnit; 30 31 Return 0; 32 } 초기화가 되어 있는지의 여부를 검사한다. Unit 클래스의 생성자를 동적으로 호출한다. 반드시 할당을 해제해줘야 한다.

04_참조 참조 사용의 예 참조 연산자 복사하지 않고, 직접 객체를 이용하는 방법 함수에서 직접 매개 변수의 값을 변경해야 할 경우 출력매개변수(out)가 여러 개일 경우 객체의 크기가 커서 객체를 복사하는 것이 비효율적일 경우 참조 연산자 & 연산자 사용

[기본예제 8-8] swap() 함수의 사용 - 참조 01 #include <iostream.h> 02 03 void swap(int &x, int &y) 04 { 05 int t; 06 t=x; 07 x=y; 08 y=t; 09 } 10 11 int main(int argc, char* argv[ ]) 12 { 13 int i=4; 14 int j=7; 15 16 cout << "i : " << i << ",\t"; 17 cout << "j : " << j << "\n"; 18 swap(i,j); 19 cout << "i : " << i << ",\t"; 20 cout << "j : " << j << "\n"; 21 return 0; 22 } x와 y, 두 개의 값을 참조 형태로 넘겨 받는다. 복사된 x와 y값이 아닌 실제 main 함수에서 사용하는 변수값을 서로 바꾼다.

[응용예제 8-9] swap() 함수의 사용 - 포인터 01 #include <iostream.h> 02 03 void swap(int *x, int *y) 04 { 05 int t; 06 t=*x; 07 *x=*y; 08 [ ⑴ ] 09 } 10 11 int main(int argc, char* argv[ ]) 12 { 13 int i=4; 14 int j=7; 15 16 cout << "i : " << i << ",\t"; 17 cout << "j : " << j << "\n"; 18 swap(i,j); 19 cout << "i : " << i << ",\t"; 20 cout << "j : " << j << "\n"; 21 return 0; 22 } x와 y, 두 개의 값을 복사하지 않고, 그 변수들의 포인터를 넘겨 받는다. 복사된 x와 y값이 아닌 실제 main 함수에서 사용하는 변수값을 서로 바꾼다. *y = t;

예제모음_1 포인터형 변수를 이용한 성적 관리 요구사항 실행결과 ① 다음과 같이 학생 10명의 수학 성적이 있다. a. 학생 번호: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 b. 수학 성적: 90, 88, 85, 55, 47, 92, 87, 30, 89, 55 ② 수학 성적이 가장 높은 학생을 찾아라. ③ 수학 성적은 정수로 한정한다. ④ 정수형 배열을 사용하라. 실행결과

예제모음_1 소스 - 1 01 #include<iostream.h> 02 03 int FindMaxNumber(int* argGrade) 04 { 05 int* grade = argGrade; 06 int maxNumber = 0; 07 int maxIndex = 0; 08 09 for(int i = 0; i < 10; i++) 10 { 11 if (*grade > maxNumber) 12 { 13 maxNumber = *grade; 14 maxIndex = i; 15 } 16 grade++; 17 } 18 19 return maxIndex; 20 } 현재 저장하고 있는 성적 중에서 가장 큰 성적을 찾기 위한 함수다. 성적의 개수가 10개므로 배열에서 10개의 값을 참 조한다. 현재 참조하는 포인터가 가리키는 값이 기존의 가장 큰 값보다 크면 그 값을 가장 큰 값으로 정의한다.

예제모음_1 소스 - 2 22 void main() 23 { 24 int grade[10] = { 90, 88, 85, 55, 47, 92, 87, 30, 89, 55 }; 25 int maxGradeIndex = 0; 26 27 maxGradeIndex = FindMaxNumber(grade); 28 29 cout << "Best grade = " << grade[maxGradeIndex] << '\n'; 30 cout << "StudentID = " << maxGradeIndex + 1 << '\n'; 31 } 가장 큰 수를 반환하는 함수를 호출

예제모음_2 두 개의 숫자를 내림차순으로 정렬 요구사항 실행결과 ① 두 개의 숫자를 입력받아, 큰 순서대로 정렬해주는 함수를 작성하라. ② 함수의 정보는 아래와 같다. 함수명: ArrangeDesc 반환형: void 매개변수: 두 개의 int형 변수 ③ 포인트 또는 참조를 활용하라. 실행결과

예제모음_2 소스 - 1 01 #include<iostream.h> 02 03 void ArrangeDesc(int* argNum1, int* argNum2) 04 { 05 int temp = 0; 06 07 if (*argNum1 < *argNum2) 08 { 09 temp = *argNum1; 10 *argNum1 = *argNum2; 11 *argNum2 = temp; 12 } 13 } 14 15 void main() 16 { 17 int Number1 = 0; 18 int Number2 = 0; 19 20 cout << "Insert first number : "; 입력 받은 두 개의 숫자를 비교해서 뒤의 숫자가 크면 두 숫자의 순서를 바꾼다.

예제모음_2 소스 - 2 21 cin >> Number1; 22 23 cout << "Insert second number : "; 24 cin >> Number2; 25 26 ArrangeDesc(&Number1, &Number2); 27 28 cout << "The result = " << Number1 << " > " << Number2 << '\n'; 29 } 두 개의 숫자 주소를 함수의 인자로 입력한다.

요약 배열 배열이란 같은 형의 변수들을 추가, 삭제, 변경하기 쉽도록 하나의 묶음으로 묶어 놓은 것으로서, 다음과 같은 방법으로 선언한다. 배열형 배열명[배열크기]; 배열형 배열명[배열크기] = {초기화}; int Number[3]; int Number[5] = {"ABCD"}; 포인터 일상 생활에서 우리 집과 친구 집을 구분하기 위해서 사용하는 주소와 동일하게 프로그램에서도 주소라는 개념을 사용하는데, 이 주소를 포인터라고 생각하면 이해하기 쉽다. 그리고 포인터는 배열과 더불어 매우 강력하고 유용한 도구다. 포인터는 다음과 같이 정의한다. 포인터형* 변수형; 포인터형* 변수명 = 초기화; int* number; int* number = NULL;

IT CookBook for Beginner, C++ 기초 8장 끝 www.themegallery.com Thank You ! IT CookBook for Beginner, C++ 기초 8장 끝