포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..

Slides:



Advertisements
Similar presentations
3. 자료형. 담당교수 : 이 성 우 C++ 프로그래밍 상수와 변수 (3) 1. 변수 (variable)  프로그램 수행 도중에 자료  변수를 위해 은 변하지 않음  선언 시에 반드시 그. ※ 저장 정보의 구성 ① 정보의 종류 ② 저장 값 ③ 저장 위치 int Num.
Advertisements

03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Vision System Lab, Sang-Hun Han
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Lamda on AVR C/C++ 최신 표준과 임베디드의 접목.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
강좌명 : C++프로그래밍 (C++ Programming)
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C++ Espresso 제9장 다형성.
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
제15장 STL과 람다식 STL의 개념을 이해하고 사용할 수 있다. 람다식을 이해하고 사용할 수 있다.
제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
제 2 장 변수와 상수.
스택(Stack) 김진수
제 3 장 상수와 변수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
임베디드 시스템을 위한 C프로그래밍 기법 3.7 ~ 4.5 장 Raphael.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
5장. 상수와 기본 자료형. 5장. 상수와 기본 자료형 5-1 C 언어가 제공하는 기본 자료형 자료형(data type) 기본 자료형 사용자 정의 자료형 int val; "선언할 변수의 특징을 나타내기 위한 키워드" 기본 자료형 기본적으로 제공이 되는 자료형 사용자.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
제2장 데이터형과 표준 입출력문 문봉근.
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
Formatted Input/Output
제 3 장 연산자 (Operators).
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
Chapter 04 자료 유형.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
루프와 카운트 Looping and counting
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
자바 5.0 프로그래밍.
10장 템플릿과 표준 템플릿 라이브러리(STL)
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
Lecture 05 문자열, 배열, 디버깅 Kwang-Man Ko
C.
printf("Global Korea\n");
Choi Younghwan CSE HUFS
Presentation transcript:

포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab.

포인터 형(pointer type) * type 확보 bit 크기 수록 값 32-bit 기억 장소 주소(address) 자료를 수록하는 기억장소의 위치(주소:address)를 수록할 수 있는 공간으로 32비트의 기억 공간이 확보됨 SQ Lab.

자료형 *변수이름 [, *변수이름] . . . ; 포인터형 변수(포인터)의 확보 • type은 int, float, char, 기타의 자료형이며 변수이름 앞에 *를 기술한다. • 자료를 수록하는 기억장소의 위치(address)를 수록할 수 있는 32비트의 기억 공간이 확보됨 • 포인터형 변수도 변수이므로 자체의 기억장소 주소가 있고, 수록되는 값도 기억장소의 주소이며 모든 주소는 정수로 표현된다. • 포인터형 변수에 수록된 값(기억장소 주소) 또는 변수 자체를 포인터(pointer)라 하고, 임의의 기억장소를 간접 지정하려고 할 경우와 문자열을 처리할 경우 사용 SQ Lab.

&변수이름 포인터 연산자 & (변수의 주소 취득) 변수이름 앞에 &를 기술하면 해당 변수(기억장소)의 주소(address)를 취득한다. SQ Lab.

*포인터형변수 포인터 연산자 * (기억장소의 간접 지정) 포인터형변수에 수록된 값(주소)의 장소를 지적 하든가 지적된 장소에 수록된 값을 참조한다. SQ Lab.

(예) 포인터(정수형) /*001*/ // pointer01cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ int i; /*010*/ cout << "\n i address=>(" << &i << ")"; /*011*/ /*012*/ int *iPointer; /*013*/ cout << "\n\n iPointer address=>(" << &iPointer << ")"; /*014*/ SQ Lab.

/*016*/ *iPointer = 100; // i = 100; /*017*/ /*018*/ cout << "\n\n i=>" << i; /*019*/ cout << "\n *iPointer=>" << *iPointer; /*020*/ /*021*/ *iPointer = *iPointer + 23; /*022*/ cout << "\n\n i=>" << i; /*023*/ cout << "\n *iPointer=>" << *iPointer; /*024*/ /*025*/ cout << "\n\n\n Type any characte<Enter> : "; /*026*/ cin >> i; /*027*/ } SQ Lab.

i(0x0012FF7C) iPointer(0x0012FF78) i(0x0012FF7C) iPointer(0x0012FF78) /*009*/ int I; i(0x0012FF7C) /*010*/ cout << "\n i address=>(" << &i << ")"; /*012*/ int *iPointer; iPointer(0x0012FF78) /*015*/ iPointer = &i; i(0x0012FF7C) iPointer(0x0012FF78) (0x0012FF7C)

iPointer(0x0012FF78) i(0x0012FF7C) (0x0012FF7C) 100 /*016*/ *iPointer = 100; // i = 100; i(0x0012FF7C) 100 iPointer(0x0012FF78) (0x0012FF7C) /*018*/ cout << "\n\n i=>" << i; /*019*/ cout << "\n *iPointer=>" << *iPointer;

iPointer(0x0012FF78) i(0x0012FF7C) (0x0012FF7C) 123 /*021*/ *iPointer = *iPointer + 23; i(0x0012FF7C) 123 iPointer(0x0012FF78) (0x0012FF7C) /*022*/ cout << "\n\n i=>" << i; /*023*/ cout << "\n *iPointer=>" << *iPointer;

(예) 포인터(실수형, 문자형) /*001*/ // pointer02cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ float f; /*010*/ cout << "\n f address=>(" << &f << ")"; /*011*/ /*012*/ float *fPointer; /*013*/ cout << "\n\n fPointer address=>(" << &fPointer << ")"; /*014*/ /*015*/ fPointer = &f; /*016*/ *fPointer = 12.00; // f = 12.00; /*017*/ SQ Lab.

/*018*/ cout << "\n\n f=>" << f; /*019*/ cout << "\n *fPointer=>" << *fPointer; /*020*/ /*021*/ *fPointer = *fPointer + 0.345; /*022*/ cout << "\n\n f=>" << f; /*023*/ cout << "\n *fPointer=>" << *fPointer; /*024*/ ///////////////////////////////////////////////////////////////// /*025*/ char c; /*026*/ cout << "\n\n\n c address=>(" << &c << ")"; /*027*/ /*028*/ char *cPointer; /*029*/ cout << "\n\n cPointer address=>(" << &cPointer << ")"; /*030*/ /*031*/ cPointer = &c; /*032*/ *cPointer = 'X'; // c = 'X'; /*033*/ SQ Lab.

/*034*/ cout << "\n\n c=>" << c; /*035*/ cout << "\n *cPointer=>" << *cPointer; /*036*/ /*037*/ cout << "\n\n\n Type any characte<Enter> : "; /*038*/ cin >> c; /*039*/ } SQ Lab.

string1 (222222) string2 string3 string2 (444444)     /*009*/ char *string1 = "first string", /*010*/ *string2, /*011*/ *string3; (222222) first string\0 string1 (222222) string2 string3 /*013*/ string2 = "second string"; string2 (444444) (444444) second string\0

string3 (666666) (666666) (666666) string3 understand?...\0 (666666)     /*015*/ string3 = new char; string3 (666666) (666666) /*016*/ cout << "\n type a string : "; /*017*/ cin >> string3; string3 (666666) (666666) understand?...\0

string1 (222222) string2 (444444) (666666) string3 understand?...\0 first string\0 string2 (444444) (444444) second string\0 string3 (666666) (666666) understand?...\0 /*019*/ cout << "\n string1=>" << string1 /*020*/ << "\n string2=>" << string2 /*021*/ << "\n string3=>" << string3; SQ Lab.

배열(array) 일반적으로 특성(구조, 성격)이 같은 원소들이 인접하게 연속적으로 배치된 것(기억 장소) SQ Lab.

1차원 배열 (one dimensional array) [1] 1차원 배열의 선언 자료형 배열이름[원소개수]; 각 원소를 구분하기 위하여 첫 번째 원소부터 0, 1, 2, 3, . . . ,n의 순서대로 번호가 부여됨 [2] 1차원 배열의 초기 값 설정 자료형 배열이름[배열크기] = {첫번쩨원소값,두번째원소값, . . .,마지막원소값}; [3] 1차원 배열의 특정 원소 지적 배열이름[원소번호] SQ Lab.

(예) 1차원 배열 /*001*/ // array0101cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ int oneArray[6]; /*010*/ /*011*/ oneArray[0] = 0; /*012*/ oneArray[1] = 1; /*013*/ oneArray[2] = 3; /*014*/ oneArray[3] = 5; /*015*/ oneArray[4] = 7; /*016*/ oneArray[5] = 9; SQ Lab.

/*018*/ cout << "\n oneArray[1] => " << oneArray[1] /*017*/ /*018*/ cout << "\n oneArray[1] => " << oneArray[1] /*019*/ << "\n oneArray[3] => " << oneArray[3] /*020*/ << "\n oneArray[5] => " << oneArray[5]; /*021*/ /*022*/ cout << "\n\n Type any character<Enter> : "; /*023*/ cin >> oneArray[0]; /*024*/ } SQ Lab.

[0] [1] [2] [3] [4] [5] [0] [1] [2] [3] [4] [5] /*009*/ int oneArray[6]; oneArray [0] [1] [2] [3] [4] [5] /*011*/ oneArray[0] = 0; /*012*/ oneArray[1] = 1; /*013*/ oneArray[2] = 3; /*014*/ oneArray[3] = 5; /*015*/ oneArray[4] = 7; /*016*/ oneArray[5] = 9; int oneArray[6] = {0, 1, 3, 5, 7, 9}; oneArray 1 3 5 7 9 [0] [1] [2] [3] [4] [5] SQ Lab.

/*018*/ cout << "\n oneArray[1] => " << oneArray[1] SQ Lab.

2차원 배열 (two dimensional array) [1] 2차원 배열의 선언 자료형 배열이름[줄수][칸수]; 각 원소를 구분하기 위한 줄 번호와 칸 번호가 0, 부터 순서적으로 부여됨 SQ Lab.

[2] 2차원 배열의 초기 값 설정 type 배열이름[줄수][칸수] = { {첫 번째 줄의 값} {두 번째 줄의 값} . {마지막 번째 줄의 값} }; [3] 2차원 배열의 특정 원소 지적 배열이름[줄번호][칸번호] SQ Lab.

(예) 2차원 배열 /*001*/ // array0201cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ int twoArray[2][4]; /*010*/ /*011*/ twoArray[0][0] = 1; /*012*/ twoArray[0][1] = 3; /*013*/ twoArray[0][2] = 5; /*014*/ twoArray[0][3] = 7; /*015*/ SQ Lab.

/*021*/ // int twoArray[2][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}}; /*022*/ /*020*/ /*021*/ // int twoArray[2][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}}; /*022*/ /*023*/ cout << "\n twoArray[0][0] => " << twoArray[0][0] /*024*/ << "\n twoArray[0][2] => " << twoArray[0][2] /*025*/ << "\n twoArray[1][1] => " << twoArray[1][1] /*026*/ << "\n twoArray[1][3] => " << twoArray[1][3]; /*027*/ /*028*/ cout << "\n\n Type any character<Enter> : "; /*029*/ cin >> twoArray[0][0]; /*030*/ } SQ Lab.

twoArray [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] /*009*/ int twoArray[2][4]; twoArray [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] twoArray [0] [1] [2] [3] SQ Lab.

int twoArray[2][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}}; /*015*/ /*016*/ twoArray[1][0] = 2; /*017*/ twoArray[1][1] = 4; /*018*/ twoArray[1][2] = 6; /*019*/ twoArray[1][3] = 8; twoAarray [0] [1] [2] [3] 1 3 5 7 2 4 6 8 int twoArray[2][4] = {{1, 3, 5, 7}, {2, 4, 6, 8}}; SQ Lab.

/*023*/ cout << "\n twoArray[0][0] => " << twoArray[0][0] /*028*/ cout << "\n\n Type any character<Enter> : "; /*029*/ cin >> twoArray[0][0]; SQ Lab.

3차원 배열 (three dimensional array) [1] 3차원 배열의 선언 자료형 배열이름[면수][줄수][칸수]; 각 원소를 구분하기 위gkdu 면 번호, 줄 번호 그리고 칸 번호가 0, 부터 순서적으로 부여됨 SQ Lab.

[2] 3차원 배열의 초기 값 설정 자료형 배열이름[줄수][칸수] = { { {첫 번째 면의 첫 번째 줄의 값} 자료형 배열이름[줄수][칸수] = { { {첫 번째 면의 첫 번째 줄의 값} {첫 번째 면의 두 번째 줄의 값} . {첫 번째 면의 끝 번째 줄의 값} } {마지막 면의 첫 번째 줄의 값} {마지막 면의 두 번째 줄의 값} {마지막 면의 끝 번째 줄의 값} }; SQ Lab.

[3] 3차원 배열의 특정 원소 지적 배열이름[면번호][줄번호][칸번호] SQ Lab.

(예) 3차원 배열 /*001*/ // array0301cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ int threeArray[2][2][3]; /*010*/ /*011*/ //1st plane /*012*/ threeArray[0][0][0] = 0; //1st row /*013*/ threeArray[0][0][1] = 1; /*014*/ threeArray[0][0][2] = 2; /*015*/ threeArray[0][1][0] = 10; //2nd row /*016*/ threeArray[0][1][1] = 11; /*017*/ threeArray[0][1][2] = 12; SQ Lab.

/*019*/ threeArray[1][0][0] = 100; //1st row /*018*/ //2nd plane /*019*/ threeArray[1][0][0] = 100; //1st row /*020*/ threeArray[1][0][1] = 101; /*021*/ threeArray[1][0][2] = 102; /*022*/ threeArray[1][1][0] = 110; //2nd row /*023*/ threeArray[1][1][1] = 111; /*024*/ threeArray[1][1][2] = 112; /*025*/ /*026*/ // int threeArray[2][2][3] = { /*027*/ // {{0, 1, 2}, {10, 11, 12}}, /*028*/ // {{100, 101, 102}, {110, 111, 112}} /*029*/ // }; /*030*/ /*031*/ cout << "\n threeArray[0][0][0] => " << threeArray[0][0][0] /*032*/ << "\n threeArray[0][1][0] => " << threeArray[0][1][0] /*033*/ << "\n threeArray[1][0][1] => " << threeArray[1][0][1] /*034*/ << "\n threeArray[1][1][1] => " << threeArray[1][1][1]; /*035*/ /*036*/ cout << "\n\n Type any character<Enter> : "; /*037*/ cin >> threeArray[0][0][0]; /*038*/ } SQ Lab.

threeArray 칸 [0] [1] [2] 줄 면 /*009*/ int threeArray[2][2][3]; SQ Lab. 면[0] [0] [1] [2] threeArray 면[1] [0] [1] [2] SQ Lab.

int threeArray[2][2][3] = { {{0, 1, 2}, {10, 11, 12}}, /*012*/ - /*024*/ threeArray 면[0] [0] [1] [2] 1 2 10 11 12 threeArray 면[1] [0] [1] [2] 100 101 102 110 111 112 int threeArray[2][2][3] = { {{0, 1, 2}, {10, 11, 12}}, {{100, 101, 102}, {110, 111, 112}} }; SQ Lab.

/*031*/ cout << "\n threeArray[0][0][0] => " << threeArray[0][0][0] /*036*/ cout << "\n\n Type any character<Enter> : "; /*037*/ cin >> threeArray[0][0][0]; SQ Lab.

크기 비설정 배열 [1] 배열의 선언 [2] 배열의 특정 원소 지적 자료형 배열이름[ ] = {초기 값 설정}; 자료형 배열이름[ ] = {초기 값 설정}; [ ]에서 크기를 설정하지 않으면 1차원 배열에만 적용되는 것으로 반드시 초기 값을 설정하여야 함 확보되는 기억 장소는 초기 값의 수만큼 확보되는 것이 아니라 시스템에서 사용할 수 있을 만큼의 기억 장소가 확보됨 [2] 배열의 특정 원소 지적 배열이름[첨자] 첨자의 범위는 0부터 n까지이다. SQ Lab.

(예) 크기 비설정 배열 /*001*/ // array0001cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ int intArray[] = {1, 3, 5}; /*010*/ /*011*/ cout << "\n intArray[0] => " << intArray[0] /*012*/ << "\n intArray[1] => " << intArray[1] /*013*/ << "\n intArray[2] => " << intArray[2]; /*014*/ /*015*/ intArray[3] = 7; /*016*/ cout << "\n intArray[3] => " << intArray[3]; /*017*/ SQ Lab.

(예) 크기 비설정 배열 /*018*/ intArray[5] = 9; /*019*/ cout << "\n intArray[5] => " << intArray[5]; /*020*/ /*021*/ cout << "\n\n Type any character<Enter> : "; /*022*/ cin >> intArray[0]; /*023*/ } SQ Lab.

intArray 1 3 5 . . . [0] [1] [2] [3] [4] [5] [n] intArray 1 3 5 7 9 /*007*/ int intArray[] = {1, 3, 5}; intArray 1 3 5 . . . [0] [1] [2] [3] [4] [5] [n] /*013*/ intArray[3] = 7; /*016*/ intArray[5] = 9; intArray 1 3 5 7 9 . . . [0] [1] [2] [3] [4] [5] [n] SQ Lab.

배열과 포인터 포인터 = 배열이름; 배열을 선언하여 기억 장소가 확보될 때 내부적으로는 배열 이름에 첫 번째 원소의 주소가 수록됨 따라서 배열 이름을 포인터에 수록하여 배열을 처리할 수도 있임 SQ Lab.

(예) 배열과 포인터 /*001*/ // arrayNpointer01cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ int intArray[5] = {11, 22, 33, 44, 55}; /*010*/ cout << "\n intArray=>(" << intArray << ")"; /*011*/ /*012*/ int* intPointer; /*013*/ intPointer = intArray; /*014*/ cout << "\n\n intPointer=>(" << intPointer << ")" /*015*/ << "=>" << *intPointer; /*016*/ SQ Lab.

/*017*/ intPointer = intPointer + 1; /*018*/ cout << "\n\n intPointer=>(" << intPointer << ")" /*019*/ << "=>" << *intPointer; /*020*/ /*021*/ intPointer = intPointer + 2; /*022*/ cout << "\n\n intPointer=>(" << intPointer << ")" /*023*/ << "=>" << *intPointer; /*024*/ /*025*/ intPointer = intArray + 4; /*026*/ cout << "\n\n intPointer=>(" << intPointer << ")" /*027*/ << "=>" << *intPointer; /*028*/ /*029*/ cout << "\n\n Type any character<Enter> : "; /*030*/ cin >> intArray[0]; /*031*/ } SQ Lab.

(0x0012FF6C) intPointer (0x0012FF6C) + 1 = (0x0012FF70) intPointer /*009*/ int intArray[5] = {11, 22, 33, 44, 55}; intArray (0x0012FF6C) (0x0012FF70) (0x0012FF74) (0x0012FF78) (0x0012FF7C) 11 22 33 44 55 [0] [1] [2] [3] [4] /*011*/ int* intPointer; intPointer /*012*/ intPointer = intArray; intPointer (0x0012FF6C) /*017*/ intPointer = intPointer + 1; 정수형 주소 값을 증가시킬 경우에는 내부적으로 4(바이트)가 증가됨 intPointer (0x0012FF6C) + 1 = (0x0012FF70) SQ Lab.

(0x0012FF70) (0x0012FF78) (0x0012FF6C) (0x0012FF7C) /*021*/ intPointer = intPointer + 2; // 내부적으로 8(바이트)가 증가됨 intPointer (0x0012FF70) + 2 = (0x0012FF78) /*025*/ intPointer = intArray + 4; // 내부적으로 16(바이트)가 증가됨 intArray intPointer (0x0012FF6C) + 4 = (0x0012FF7C) SQ Lab.

int*, long*, unsigned* , unsigned long* short*, unsigned short* 4 2 [참고] 다음은 각 자료형의 주소를 1 증가시킬 경우의 증가 값을 정리한 것임 자료형 증가 값 int*, long*, unsigned* , unsigned long* short*, unsigned short* 4 2 float* double*, long double* 8 char*, signed char*, unsigned char* 1 SQ Lab.

배열로의 문자열 처리 char 배열이름[크기] = "문자열"; char 배열이름[ ] = "문자열"; [1] 문자형 배열 선언과 문자열 수록 char 배열이름[크기] = "문자열"; char 배열이름[ ] = "문자열"; 문자열을 배열에 수록 시켜 처리하려면 배열 선언 시 크기를 설정하지 않고 초기 값으로 수록하여 처리하는 것이 일반적이나 배열의 크기를 설정할 경우 문자열을 구분하는 ‘\0’문자가 수록될 수 있는 크기의 공간을 확보하여야 함. 한 번 초기 값으로 수록시킨 배열의 문자열을 변경하려면 배열의 각 원소에 대한 처리로 해 주어야 함 SQ Lab.

(예) 배열에서의 문자열 처리 /*001*/ // stringArray01cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ char string1[10] = "ABC"; /*010*/ cout <<"\n string1=>" << string1; /*011*/ /*012*/ string1[0] = 'C'; /*013*/ string1[1] = '&'; /*014*/ string1[2] = 'C'; /*015*/ string1[3] = '+'; /*016*/ string1[4] = '+'; /*017*/ string1[5] = '\0'; SQ Lab.

/*019*/ cout <<"\n string1=>" << string1; /*018*/ /*019*/ cout <<"\n string1=>" << string1; /*020*/ ///////////////////////////////////////////////////////// /*021*/ char string2[4] = "XYZ"; /*022*/ cout <<"\n\n string2=>" << string2; /*023*/ /*024*/ string2[0] = 'o'; /*025*/ string2[1] = 'n'; /*026*/ string2[2] = 'e'; /*027*/ /*028*/ cout <<"\n string2=>" << string2; /*029*/ /*030*/ cout << "\n\n Type any character<Enter> : "; /*031*/ cin >>string1[0]; /*032*/ } SQ Lab.

[참고] string1 = "C&C++"; //이와 같이 기술하면 안됨 /*009*/ char string1[10] = "ABC"; string1 A B C \0 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] /*012*/ string1[0] = 'C'; /*013*/ string1[1] = '&'; /*014*/ string1[2] = 'C'; /*015*/ string1[3] = '+'; /*016*/ string1[4] = '+'; /*017*/ string1[5] = '\0'; string1 C & + \0 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [참고] string1 = "C&C++"; //이와 같이 기술하면 안됨 SQ Lab.

[참고] 배열인 string2의 내용을 변경하기 위하여 다음과 같이 기술할 수 없다. string2= "one"; /*021*/ char string2[4] = "XYZ"; string2 X Y Z \0 [0] [1] [2] [3] /*024*/ string2[0] = 'o'; /*025*/ string2[1] = 'n'; /*026*/ string2[2] = 'e'; string2 o n e \0 [0] [1] [2] [3] [참고] 배열인 string2의 내용을 변경하기 위하여 다음과 같이 기술할 수 없다.   string2= "one"; SQ Lab.

[2] cin으로의 문자열 입력 char 배열이름[크기]; cin >> 배열이름; 자판에서 입력된 문자열을 지정한 배열에 수록함 확보시킨 공간의 크기보다 입력된 문자열의 크기가 더 크더라도 공간이 자동 확장되어 문자열 모두 수록됨 입력된 문자열은 공백, 탭, 리턴문자로 구분함 SQ Lab.

(예) /*001*/ // stringArray02cNcpp /*002*/ /*003*/ #include "iostream" /*004*/ /*005*/ using namespace std; /*006*/ /*007*/ void main() /*008*/ { /*009*/ char string[100]; /*010*/ /*011*/ cout << "\n Type a string : "; /*012*/ cin >> string; /*013*/ cout << "\n string=>" << string; /*014*/ /*015*/ cout << "\n\n Type any character<Enter> : "; /*016*/ cin >> string; /*017*/ } SQ Lab.

[0] [1] [2] [3] [4] [0] [1] [2] [3] [4] /*009*/ char string[100]; string [0] [1] [2] [3] [4] … [99] /*012*/ cin >> string; (1) 입력된 문자열이 배열의 크기보다 같거나 작을 경우 입력된 문자열이 수록되고 뒤에 '\0'가 수록됨 string X Y Z \0 [0] [1] [2] [3] [4] … [99] SQ Lab.

기억 장소가 확장되어 입력된 문자열이 수록되고 뒤에 '\0'가 수록되나 실행 마지막에 에러 창이 나타남 (2) 입력된 문자열이 배열의 크기보다 클 경우 기억 장소가 확장되어 입력된 문자열이 수록되고 뒤에 '\0'가 수록되나 실행 마지막에 에러 창이 나타남 SQ Lab.

실습문제 [실습문제 1] 1차원 배열 n개의 원소로 이루어진 배열의 각 원소 값을 자판으로부터 입력하여 수록하고,   n개의 원소로 이루어진 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, 홀수(또는 짝수) 번호 원소들만의 값을 더한 값을 화면에 나타나게 하시오. SQ Lab.

n개의 원소로 이루어진 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, [실습문제 2] 검색   n개의 원소로 이루어진 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, 임의의 값 x를 자판으로부터 입력받아 그 값이 배열의 몇 번째 원소에 있는지를 알아보는 프로그램을 작성하시오. SQ Lab.

5(n)개의 원소로 이루어진 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, [실습문제 3] 정렬   5(n)개의 원소로 이루어진 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, 작은 값부터 큰 값 순으로 재배치하여 화면에 나타내는 프로그램을 작성하시오. SQ Lab.

(3x4)인 두 행렬의 대응 항목에 대한 더하기 결과를 화면에 나타내게 하시오. 예를 들어 두 행렬이 다음과 같을 경우 X   [실습문제 4] 2차원 배열   (3x4)인 두 행렬의 대응 항목에 대한 더하기 결과를 화면에 나타내게 하시오. 예를 들어 두 행렬이 다음과 같을 경우 X 1 3 5 7 2 4 6 8 9 12 y 10 11 12 13 20 21 22 23 30 31 32 33 SQ Lab.

(2x2x3)인 3차원 배열의 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, [실습문제 5] 3차원 배열   (2x2x3)인 3차원 배열의 배열의 각 원소 값을 자판으로부터 입력하여 수록하고, 배열의 값을 나타내고, 모든 원소의 값을 더한 값을 화면에 나타내게 하시오. SQ Lab.