◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
참조변수의 특징에 대해서 이해하고, 포인터변수와의 차이점에 대해서 알아보자.
// 참조는 선언시 무조건 초기화를 해야 한다. // 참조는 한번 정의하면 그 대상을 변경할 수 없다. // 참조는 선언시 타입이 일치해야만 한다. // 아래 코드를 참조을 이용한 코드로 변경하시오. /* #includeusing namespace std; void swap(int* a, int* b); void main( ) { int m=5; int n=100; cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; swap(&m, &n); cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; } void swap(int* a, int* b) { int temp = *a; *a=*b; *b=temp; } */ /* #include using namespace std; void swap(int& a, int& b); void main( ) { int m=5; int n=100; cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; swap(m, n); cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; } void swap(int& a, int& b) { int temp = a; a=b; b=temp; } */ #include using namespace std; void swap(int* a, int* b); void swap(int& a, int& b); void main( ) { int m=5; int n=100; cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; swap(&m, &n); cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; swap(m, n); cout << "앞쪽 " << m << " 뒤쪽 " << n << endl; } void swap(int* a, int* b) { int temp = *a; *a=*b; *b=temp; } void swap(int& a, int& b) { int temp = a; a=b; b=temp; }
/* void main() { int a = 100; int* b = // 포인터 이용 : getNum()함수에 a를 넣고 함수의 리턴값으로 다시 a를 받으세요. *b = 1000; cout << a << endl; int c = 100; int& d = // 참조 이용 : getNum()함수에 c를 넣고 함수의 리턴값으로 다시 c를 받으세요. d = 2000; cout << c << endl; cout << endl; } */ #includeusing namespace std; int* getNum(int* num) { return num; } int& getNum(int& num) { return num; } void main() { int a = 100; int* b = getNum(&a); *b = 1000; cout << a << endl; int c = 100; int& d = getNum(c); d = 2000; cout << c << endl; cout << endl; }
배열은 참조변수로 받을 없고, 포인터 변수로 받아야 한다.
#includeusing namespace std; // const 주의사항 : 일반적으로 변수를 만들 때 사용하는 const는 상수를 만든다는 의미지만, // 함수의 인자에 사용되는 const는 상수가 아닌 인자로 들어온 변수를 변경하지 않겠다는 의미이다. // -> 이는 참조 변수를 받을 때 주로 사용된다. void copy(int* target, int* source, const int counts ); void reverse(int* target, int* source, const int counts ); void main() { int num[]={8,54, 11,-45,43,26,66,12,33, 65}; const int n=sizeof(num)/sizeof(int); int after[n]; //n --> 배열 선언시 상수 사용 for(int i=0; i < n; i++) { cout << num[i] << "\t"; } //copy(after, num, n); reverse(after, num, n); //역순 복사 for(int i=0; i < n; i++) { cout << after[i] << "\t"; } cout << endl; } //소스 배열에서 타겟 배열로 일대일 복사 void copy(int* target, int* source, const int counts ) { for(int i=0; i < counts; i++) { target[i] = source[i]; } } //소스 배열에서 타겟 배열로 역순으로 일대일 복사 void reverse(int* target, int* source, const int counts ) { for(int i=0; i < counts; i++) { target[i] = source[counts-1-i]; } /*for(int i=0, j=counts-1; i < counts; i++, j--) { target[i] = source[j]; } */ }