상세 컨텐츠

본문 제목

포인터 자료형 해설

C++,C#, ASP.NET

by 김일국 2018. 9. 25. 11:18

본문

1). C언어에서 포인터 자료형을 프로그램 코드로 비교해 보았다.

*일반변수 m 의 값을 n변수에 대입한다.

int n, m;

m = 3;

n = m;

*포인터변수 *ptr(역참조연산자=>아래그림에서는 ff8번지의 3) 와 &m(주소리턴연산자=> 아래그림에서는 변수m의 주소 ff8번지) 사용(아래),

int *ptr;

int n, m;

m = 3;

ptr = &m;

n = *prt;

위 상황을 그림으로 표시하면(아래),


2). C++ 언어의 참조형변수는 메모리에 참조형변수공간이 별도로 존재하지 않고, 일반변수와 같은 공간을 사용한다.(아래예)

int result = 0;

int &ref_result = result; // result 변수와 ref_result 참조변수는 서로간에 별칭이다(alias) 즉, 같은 메모리주소에 2개의 변수이름이 존재한다.

ref_result = 30; // 즉, 결과적으론 result에 30을 대입한 것으로 나타난다.

*함수에서 사용예(아래는 결과는 같은 함수이지만, 참조형 매개변수를 사용하면, 코드 가독성이 좋아진다.)

 - 포인터 매개변수 사용

void incr(int *p) {

(*p)++;

}

incr(&p);

 - 참조형 매개변수 사용

void incr(int &p) {

p++;

}

incr(p);

-------------------------------------------------------------------

포인터 자료형의 장점:

 - 메모리 길이(크기)를 고정해서 사용하지 않고, 유동적으로 사용이 가능하다.

 - 주소지정을 어셀블리 언어에서 메모리주소를 지정하는 것처럼 사용 가능하다.

 - 포인터 산술 연산이 가능하기 때문에, 프로그램 유연성이 높다.

포인터 자료형의 단덤:

 - 포인터 산술 연상시 허상 참조나 분실된 동적 변수 문제등 예상치 못한 에러가 발생한다.

--------------------------------------------------------------------------------

* 포인터 자료형의 배열 표시 예,

int array[10] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};

int *p;

p = array; //포인터변수 초기화 array[0]의 주소를 포인터변수p에 할당.

*(p+1) 과 array[1] 동일.

*(p+index) 와 array[index] 동일.

p[index]와 arrary[index] 동일.


'C++,C#, ASP.NET' 카테고리의 다른 글

2_WPF앱사용C#  (0) 2020.01.15
1_WPF앱사용C#  (0) 2020.01.14
VC++ 소켓통신프로그램_클라이언트  (0) 2018.03.16
VC++ 소켓통신_서버프로그램  (0) 2018.03.15
VC++ GDI프로젝트_2  (0) 2018.03.12

관련글 더보기

댓글 영역