Views 11426 Votes 0 Comment 0
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

레퍼런스(References)

레퍼런스는 자동적으로 역참조되는 포인터라고 할 수 있다. 자동적 역참조(automatically dereferenced)라는 것은 레퍼런스의 값을 얻기 위해 역참조 연산자 *를 사용할 필요가 없음을 의미한다. 레퍼런스는 다른 변수를 위한 별명(aliases)을 만든다.

int i = 20; //일반 정수형 변수

int *ip = &i; // 정수형에 대한 포인터

int & ir = i; // 정수형에 대한 레퍼런스

레퍼런스를 정의 하기 위해 주소 연산자, &를 사용한다.

레퍼런스를 초기화하지 않고 레퍼런스를 정의해서는 않된다. ir은 현재 i의 별명이고 ir에 행해지는 것은 역으로 i에 행해진다.

ir = 10; // i의 값이 10이 된다.

ip

.....

ir-i-

10

예제

레퍼런스 변수의 정의

#include

#include

#include

void main(){

void *vp;

int i = 20;

int & ir = i;

clrscr();

cout << ir << endl;

ir=10;

cout << i << endl;

i=50;

cout << ir << endl;

getch();

}


레퍼런스는 함수간 매개변수 전달 시 강력한 힘을 발휘한다.

상수에 대한 포인트

int i=10;

const int *ip = &i;

ip는 const int에 대한 포인트이다. 그러므로 ip의 내용은 수정할 수가 없다.

아래의 예제를 보자.

예제

상수에 대한 포인트

#include

#include

#include

void main(){

int i = 20;

const int * ip= &i ;

clrscr();

cout << *ip << endl;

*ip=10; // 에러발생 (cannot modify a const object)

cout << *ip << endl;

getch();

}


상수 포인트는 일반변수를 상수처럼 다루도록 요구하여 접근을 제한할 때 사용한다.

포인트 상수

int i = 20;

int * const ip = &i;

ip 가 const형임을 의미한다. 즉 ip를 바꿀 수 없다. 그러나 ip의 내용은 바꿀 수 있다.

예제

포인트 상수

#include

#include

#include

void main(){

int i = 20, j =10 ;

int * const ip= &i ;

clrscr();

cout << *ip << endl;

*ip=j; // ip의 내용은 바꿀 수 있다.

cout << *ip << endl;

ip = &j; // 에러발생 (cannot modify a const object)

getch();

}


읽기 전용 레퍼런스

int i = 25;

const int & r = i;

r은 상수에 대한 레퍼런스이다. 따라서 r로써 i의 값을 변경할 수 었다.

r=30; // 에러 발생

하지만 i에 직접 값을 바꿀 수는 있다.

i=30;

r은 읽기 전용이다.

혼자 해보기

배열의 각 요소에 12개월의 날짜를 가진 정수 배열을 초기화하는 프로그램을 작성해 보자. 배열을 정의하고 초기화한 다음, 배열의 첫 번째 요소를 가리키는 포인터 상수를 생성하자. 배열의 이름을 사용하지 말고 포인터 상수를 사용해서 배열의 요소를 출력하는 루프를 작성해 보자.

메모리 동적 할당

동적(dynamic)이란 말은 변화를 의미하는데, 동적 메모리 할당(dynamic memory allocation)은 메모리를 할당하고 해제할 때 힙의 크기가 변하는 것을 말한다.

메모리

MS-DOS

Turbo C++

프로그램

프로그램 변수 힙

남겨진

메모리

힙은 남겨진 메모리이다.

메모리 힙을 위한 new

힙에 정수를 하나 할당하자.

int * a = new int;

new라는 키워드는 힙을 사용하라는 의미이다. 힙에 int 만큼 메모리를 잡아서 변수 a가 가리키도록 한다.

물론 하나의 변수를 힙에 할당하는 것은 그렇게 좋은 것은 아니다. 다음과 같이 보통 배열을 할당할 때 사용한다.

int *a = new int[100];

예제

Heap에 배열할당하고 초기화하기

#include

#include

#include

void main(){

int *arr = new int[10]; // 메모리 할당

clrscr();

for(int i = 0; i < 10; i++){ //초기화

*(arr+i) = i*2;

}

for(i = 0; i < 10; i++){ // 출력

cout << *(arr+i) << endl;

}

getch();

}


delete으로 메모리 해제하기

new로 메모리를 할당하면 delete으로 해제한다.

메모리를 반납하여 다른 자원이 이 메모리를 쓸 수 있도록 한다.

delete a; // 메모리를 힙에 돌려줌

다음 문장은 new로 할당된 메모리의 배열을 해제한다.

delete [] arr; // 힙으로부터 배열을 해제한다.

예제

delete으로 메모리 해제

#include

#include

#include

void main(){

int *arr=new int[10];

clrscr();

for(int i=0;i<10;i++){

*(arr+i)=i*2;

}

for(i=0;i<10;i++){

cout << *(arr+i)<

}

delete [] arr; // 메모리 해제

getch();

}


detete arr; 으로 하면 배열의 첫 번째 요소만 해제하므로 주의해야 한다.

다차원 배열

int (*arr) [6] = new int[5][6]; // (* arr) arr이 포인트라는 것이다.

int (*arr2)[5][6]= new int[4][5][6];

첫 번째 차원은 명시하지 않으며 두 번째 차원은 배열의 첫 번째 차원의 각 요소들을 위해 6개의 요소를 갖는다.

delete [] arr; // []가 하나 뿐임을 주시하자.

delete [] arr2;

메모리를 해제한다.

예제

2차원 배열 메모리 할당 및 해제

#include

#include

#include

void main(){

int (*arr)[6] = new int[5][6]; // 할당

clrscr();

for(int i = 0;i < 5;i++) // 초기화

for(int j = 0;j < 6;j++)

*(*(arr + i) + j) = i + j;

for(i = 0;i < 5;i++){ // 출력

for(j = 0;j < 6;j++)

cout << setw(5) << arr[i][j];

cout << endl;

}

delete [] arr; // 해제

getch();

}



?

List of Articles
No. Category Subject Author Date Views
681 Develop [c++]현승이가 보내준 동영상 암호화 자료.. 볼것.. file hooni 2003.04.23 9728
680 Develop [c++]현승이가 보내준 암호화 모듈 AES라인델.. file hooni 2003.04.23 10714
679 Develop [c/c++] Makefile 사용하기.. ㅋㅋ hooni 2003.04.23 7321
678 Develop [chm] C++ 문법 가이드 file hooni 2013.04.23 7942
677 Develop [chm] Programming Applications for Microsoft Windows file hooni 2013.04.23 7267
676 Develop [chm] 비주얼 C++ 팁 모음 문서 file hooni 2013.04.23 7500
675 Develop [chm] 윈도우즈에서 디버깅 기법(Debugging Applications) file hooni 2013.04.23 7527
674 Develop [coding] Find all anagrams in a string hooni 2017.06.27 1138
673 Develop [coding] 공부해야 하는거 ㅋㅋ secret hooni 2017.06.27 0
672 Develop [css] z-index에 설정할 수 있는 최대값? hooni 2013.12.20 14705
671 Develop [css] 스크롤바 안생기게 hooni 2003.04.23 9886
670 Develop [css] 화면 스크롤 제어 ㅋㅋ hooni 2003.04.23 8681
669 Develop [c] 64bit 머신에서 inet_ntoa() 사용시 Segment fault 대처 방법법 hooni 2014.02.08 14232
668 Develop [c] AES 알고리즘 (암호화/복호화) file hooni 2003.04.23 20046
667 Develop [c] alarm()함수 설명과 간단한 예제 file hooni 2013.04.23 6678
666 Develop [c] CGI Library to C^^ hooni 2003.04.23 8421
Board Pagination Prev 1 ... 9 10 11 12 13 ... 53 Next
/ 53