본 자료는 국립 창원대학교 메카트로닉스 공학부 학생을 대상으로 한 컴퓨터 언어 응용 수업 자료입니다. 본 자료는 수업의 교재인 (핵심요약판) C++로 시작하는 객체지향 프로그래밍 (Y. Daniel Liang 저, 권기형 / 김응성 공역) 의 내용을 재구성한 것으로 수업보조 자료 이외의 목적이 없음을 알립니다.
포인터 변수
포인터변수, 줄여서 포인터라고 하는 것은 주소값을 저장하는 변수를 말합니다.
위와 같이 (*) 기로를 사용해서 포인터임을 선언하는데요. 포인터변수는 주소값을 저장하긴하지만, 그 주소값에 저장되어있는 변수의 데이터형으로 포인터의 데이터를 저장해야합니다. 이유는 포이터변수는 엄밀히 말하면 시작되는 주소값만을 저장하는 것이기 때문이지요. 그러니 데이터 유형을 알아야 끝낼수 있거든요...
<코드1>
#include <iostream> using namespace std; int main() { int count = 5; int *pCount = &count; cout << "The address of count is " << &count << endl; cout << "The address of count is " << pCount << endl; cout << "The value of count is " << count << endl; cout << "The value of count is " << *pCount << endl; return 0; }
위 코드를 보면, 포인터의 의미는 확실히 알 수 있는데요. count라는 변수에 5를 저장하구요. pCount라는 포인터변수에 count의 주소값을 저장합니다. 그걸 cout으로 출력해서 확인해 보았네요.
배열도 일종의 포인터라고 할 수 있는데요. 배열을 선언하면 위에서처럼 저장된다고 볼 수 있는데요.
<코드2>
#include <iostream> using namespace std; int main() { int list[6] = {11, 12, 13, 14, 15, 16}; int *pList = &list[0]; for (int i = 0; i < 6; i++) cout << "address: " << (list + i) << " value: " << *(list + i) << " " << " value: " << list[i] << " " << " value: " << *(pList + i) << " " << " value: " << pList[i] << endl; return 0; }
위 예제에서는 배열(list)을 선언하고, 각 저장공간의 주소와 그 내용을 볼때, 그냥 *(list+i)로 불러본것과 list[i]로 불러본 것등의 역활이 같음을 보여줍니다.
예제
이 예제는 포인터를 이용해서 배열을 역수로 변형시키는데요. 6번행의 문법에 주의하셔야합니다. new 연산자를 사용해서 함수외부로 변수를 전달하고 있거든요.
<코드 3>
#include <iostream> using namespace std; int * reverse(const int * list, int size) { int *result = new int[size]; for (int i = 0, j = size - 1; i < size; i++, j--) { result[j] = list[i]; } return result; } void printArray(const int *list, int size) { for (int i = 0; i < size; i++) cout << list[i] << " "; } int main() { int list[] = {1, 2, 3, 4, 5, 6}; int *pList = reverse(list, 6); printArray(pList, 6); return 0; }
<코드 4>
#include <iostream> using namespace std; int Max(int *num,int *counts ); int main() { int num[]={8,54, 11,-45,43,26,66,12,33, 65}; int n=sizeof(num)/sizeof(int); cout<<"*counts 값: "<<n<<" 주소: "<<&n<<endl; cout<<"최대값 :"<<Max(num, &n)<<endl; //&n <-- 주소를 넘긴다. cout<<"\n----------------------------"<<endl; system("PAUSE"); //기다림 return EXIT_SUCCESS; //EXIT_SUCCESS 0 } //&n을 counts로 받는다. counts 주소에 있는 값--> *counts int Max(int *num,int *counts ){ cout<<"*counts 값: "<<*counts<<" 주소: " <<&counts<<" != 참조주소: "<<counts<<endl; int max=num[0]; for(int i=1;i<*counts;i++){ if(num[i]>max){ max=num[i]; } } return max; }
이 예제는 포인터를 사용해서 배열의 최대값을 찾아보는 것입니다.
참고자료 |
반응형
'Theory > Lecture' 카테고리의 다른 글
[선형변환] 이산시스템과 z 변환 (z-transform) (14) | 2009.11.05 |
---|---|
[공업수학] 방향도함수와 접평면의 방정식 (8) | 2009.11.01 |
[공업수학] 편도함수 (2) | 2009.11.01 |
[공학입문설계] 최적화 설계 문제 (12) | 2009.10.30 |
[C/C++] 배열 (Array) (12) | 2009.10.24 |
[공학입문설계] 문제 해결 방법 (0) | 2009.10.21 |
[선형변환] 푸리에 변환 Fourier Translation (20) | 2009.10.21 |