Contents

조회 수 11418 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

레퍼런스(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
번호 분류 제목 글쓴이 날짜 조회 수
85 Develop [js] 키보드 아스키코드(ASCII) 코드보기 hooni 2003.04.23 32476
84 Develop [html] 캐쉬된 웹페이지 사용하지 않도록 하는 방법 hooni 2003.04.23 13028
83 Develop [js] 이미지 미리 로딩하기 hooni 2003.04.23 7008
82 Develop [js] 핫키(단축키) 구현방법 hooni 2003.04.23 7629
81 Develop [js] 키보드 아스키 코드 확인하는 간단한 소스 hooni 2003.04.23 7744
80 Develop [jsp] 유효성체크(Client, Server 에서) file hooni 2003.04.23 7408
79 Develop [c] C로 구현한 CGI - 달력과 날짜계산기 file hooni 2003.04.23 32261
78 Develop [c] C로 구현한 CGI - 계산기 (링크리스트, 스택, 이진트리) file hooni 2003.04.23 28075
77 Develop [c] C로 구현한 CGI - 방명록 file hooni 2003.04.23 33425
76 Develop [c++] 기초강좌 #04(클래스) hooni 2003.04.23 11822
75 Develop [c++] 기초강좌 #03(함수의 매개변수 전달) hooni 2003.04.23 12072
» Develop [c++] 기초강좌 #02(레퍼런스,메모리할당) hooni 2003.04.23 11418
Board Pagination Prev 1 ... 59 60 61 62 63 64 65 66 67 68 ... 71 Next
/ 71