포인터란?
메모리의 위치를 표현한 기호
메모리의 주소값을 표현한 변수
포인터의 핵심은 그림을 그리는 것
메모리를 우리 생활에 비유하자면,
메모리 주소는 우리가 현재 살고 있는 집의 번지수
메모리주소의 값은 그 주소에 살고있는 거주민으로 비유해볼 수 있다.
포인터 변수는 주소의 번지를 할당할 수 있다.
메모리 주소는 본인이 편한 숫자로 임의로 정한다.
위 그림처럼 포인터 변수영역, 일반 메모리 영역에 메모리 주소와 메모리 주소의 값 세 부분으로 나누어 그리고 시작하면 비교적 쉽게 접근 가능하다.
포인터 변수 선언
int *a; -> a라는 변수를 만들고 메모리와 상관 없이 변수 a를 만들어놓고 이 친구는 보통 변수 아니고 포인터 변수다. 주소값을 가지는 특징이 있다.
*a = 10 -> *a는 a의 값이라고 해석하고, a에 값에 해당하는 메모리 주소의 메모리 '주소의 값'에 10을 할당해라
만약 포인터 변수 a에 메모리 주소 102번지가 할당됐다면, 그 102번지의 값에 10을 할당하라는 의미
주의
메모리 주소 vs 메모리 주소의 값 구분하기
상단의 그림을
설명을 위해 표로 나타내보면
포인터 변수 | 메모리 주소(번지수) | 메모리 주소의 값(거주민) |
a (메모리 주소(번지수)를 받는다) | 101 | |
102 | 102 | 10 |
103 | ||
104 |
printf("%d,a); = 102 -> 변수a에 할당된 값(메모리 주소) 102
printf("%d,*a); = 10 -> a의값 즉, 102에 할당된 메모리 주소의 값(거주민) 10
변수의 주소 찾기
ex.
int b = 10;
int *a; -> 포인터 변수의 선언(공간을 만듦)
a = &b;
&b-> b의 주소로 해석
일반적으로 int b = 10;이면, 임의적인 메모리 주소(번지수) 100,101,102,103중에 b의 공간을 만들고 그 메모리의 주소의 값에 10을 할당한다.
포인터 변수 | 메모리 주소 | 메모리 주소의 값 | |
a | 100 | ||
101 | 101 | b | 10 |
102 | |||
103 |
a = &b; 는 포인터 변수 a의 공간에 b의 주소를 할당하라는 의미이다.(주소의 값X)
그러므로 a 공간에 들어갈 값은 101
printf("%d₩n", *a); -> 10, a의 값 즉, 메모리주소 101에 들은 메모리 주소의 값을 출력하라
printf("%d₩n", b); -> 10, b에 할당된 값, 즉 b로 형성돼있는 메모리주소 101번지에 들은 메모리 주소의 값을 출력하라
ex.
#include<stdio.h>
void main() {
int A = 10, B;
int *C = &B;
B=A--;
B+=20;
printf("%d", C);
해설
초기세팅
포인터 변수 C = &B(B의 메모리 주소) | 메모리 주소 | 메모리 주소의 값 | |
102 | 100 | ||
A | 101 | 10 | |
B | 102 | ||
103 |
메모리 주소에 A,B할당하는 것은 항상 임의로 알아서 할당하자.
위의 초기 세팅 값에서
B=A--와
B += 20;을 연산하기 위해 표를 변형하면
포인터 변수 C = &B(B의 메모리 주소) | 메모리 주소 | 메모리 주소의 값 | B=A-- | B+=20 | |
102 | 100 | ||||
A | 101 | 10 | 9(후에 --) | ||
B | 102 | 10(먼저 할당) | 30 | ||
103 |
printf("%d", *C); -> 30
C의 값 즉, 포인터 변수 C의 메모리 주소(102)가 가르키는 메모리 주소의 값(거주민) = 30
B=A--, B+=20연산을 한 이후의 메모리 주소 102(B)에 할당된 주소의 값(거주민)은 30
'iOS > 정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 - 배열과 포인터(배열에도 주소값이 있다) (0) | 2022.06.10 |
---|---|
[정보처리기사] C언어 - scanf 와 변수(feat. 포인터 변수) (0) | 2022.06.09 |
[정보처리기사] C언어 - 배열의 이해와 배열 문제풀이 (0) | 2022.06.03 |
[정보처리기사] C언어 - continue, break 개념과 for 반복문이 섞인 문제 박살내기 (feat. 다중for문) (0) | 2022.06.01 |
[정보처리기사] C언어 - while과 if문이 같이 있는 문제 박살내기 (0) | 2022.06.01 |