포인터와 주소
포인터
- 메모리의 주소 값을 담고 있는 변수 또는 상수
- 데이터 위치를 가리키는 변수
주소
- 메모리 저장된 위치(번지)
&
연산자를 사용하면 특정 변수의 주소를 반환
단항 간접 참조 연산자
#include <stdio.h>
void main()
{
int a;
int *pa;
a=10;
pa=&a;
printf("a: %d\n", a); // 10
*a=100;
printf("a: %d\n", a); // 100
}
더블 포인터
#include <stdio.h>
void main()
{
int A = 50, B = 100;
int* pA = &A;
int** dpA = &pA;
/* Test 1 */
printf("pA : %d\n", *pA); // 50
printf("dpA : %d\n\n", **dpA); // 50
/* Test 2 */
*dpA = &B;
printf("pA : %d\n", *pA); // 100
printf("dpA : %d\n\n", **dpA); // 100
/* Test 3 */
**dpA = 999;
printf("B : %d\n", B); // 999
printf("pA : %d\n", *pA); // 999
printf("dpA : %d\n\n", **dpA); // 999
/* Test 4 (Maybe compile error) */
**dpA = &A; // address of A (ex. 11223344)
printf("pA : %d\n", *pA); // 11223344
printf("dpA : %d\n\n", **dpA); // 11223344
}
위 결과를 더블 포인터를 초점으로 정리해보면,
- 더블 포인터 형으로 선언한 변수 dpA는 pA가 가리키는 변수의 주소를 가리킨다.
- 1에 따라 *dpA는 dpA가 가리키는 포인터 pA의 값을 의미한다.
- 따라서 *dpA에 B의 주소를 대입하는 것은 pA에 B의 주소를 대입하는 것과 동일하다.
- 결과적으로 포인터의 값을 변경하는 것은 포인터가 가리키는 변수의 값을 변경하는 것과 동일하다.
'Language > C++' 카테고리의 다른 글
윈도우 프로그래밍 - MFC 개요 및 배경 지식 (0) | 2018.12.28 |
---|---|
C++ Reference and friend (0) | 2018.12.28 |
지역변수, static, extern 정리 (0) | 2018.12.27 |
C4996 error in visual studio – Scanf Error (0) | 2018.12.27 |
C언어 malloc에 대하여 (0) | 2018.12.27 |