iOS/정보처리기사

[정보처리기사] C언어 - 포인터의 이해(feat. 포인터변수, 주소, 주소값)

Chafle 2022. 6. 9. 20:25
반응형

포인터란?

메모리의 위치를 표현한 기호

메모리의 주소값을 표현한 변수

 

 

포인터의 핵심은 그림을 그리는 것

메모리를 우리 생활에 비유하자면,

메모리 주소는 우리가 현재 살고 있는 집의 번지수

메모리주소의 값은 그 주소에 살고있는 거주민으로 비유해볼 수 있다.

포인터 변수는 주소의 번지를 할당할 수 있다.

 

 

메모리 주소는 본인이 편한 숫자로 임의로 정한다.

 

 

 

위 그림처럼 포인터 변수영역, 일반 메모리 영역에 메모리 주소와 메모리 주소의 값 세 부분으로 나누어 그리고 시작하면 비교적 쉽게 접근 가능하다.

 

 

 

포인터 변수 선언

 

 

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

 

 

 

반응형