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] 동일.
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 |
댓글 영역