본문 바로가기
* Language/C

[C언어] 포인터 개념 아직도 햇갈리시나요? 코드로 봐야 100% 이해 할 수 있습니다.

by codinguser 2021. 9. 4.

C언어를 공부하다 보면 고비가 찾아오는데

그 첫번째 관문이 포인터 부분이 아닐까 싶다.

 

프로그래밍 언어를 공부함에 있어서, 가장 좋은 방법은 코드로 계속해서 뜯어 보는 것이다.

(책으로 계속해서 봐봤자 절대 실력 향상에 도움이 되지 않는다는 것을 경험한적이 있다.)

 

그냥 모르더라도 일단 코드로 쳐보고 개념과 1:1 매핑을 시켜보는 과정이 제일 중요 한것 같다.

 

 

 

포인터 개념


* 포인터란?

 

: 메모리 주소값을 저장하는 변수.

 

C언어 포인터
포인터도 변수다

 

* 표현 방법?

 

int n = 10;

int *ptr = &n;

 

 

 

하나의 기초적인 프로젝트로 포인터 이해하기


정답(Answer) 보다는 아래의 시행착오 과정을 우선적으로 보는것을 추천드립니다.

그리고 난 뒤 Answer를 보면 어느정도 이해가 갈거라 생각합니다.

 

 

Q) num1, num2의 숫자를 입력받아 swap 해주는 프로그램을 제작해봐라

이 때, 출력 결과가 나와야 한다.

 

 

Answer)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
void swap(int* a, int* b){
 
    int temp;
    
    temp = *a;
    *= *b;
    *= temp;    
}
 
int main() {
 
    int num1, num2;
    
    scanf("%d %d"&num1, &num2);
    swap(&num1, &num2);
 
    printf("%d %d", num1, num2);
 
    return 0;
}
cs

 

 

 

 

 

 

 

시행착오(포인터로 접근 안했을 때 발생하는 Case)


 

* 두 수를 바꾸는 기초적인 로직

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main() {
    int num1, num2, temp;
 
    num1 = 1;
    num2 = 2;
        
    temp = num1;
    num1 = num2;
    num2 = temp;
 
    printf("%d %d",num1, num2);
    
    return 0;
}
cs

일단 main()함수내에서 swap을 하게 된다면 위의 코드처럼 접근

 

 

 

 

 

- 시행착오

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
void swap(int a, int b){
 
   int temp;
   
   temp = a;
   a = b;
   b = temp;   
}
 
int main() {
 
   int num1, num2;
   
   scanf("%d %d"&num1, &num2);
   swap(num1, num2);
 
   printf("%d %d", num1, num2);
 
   return 0;
}
 
cs

 

그렇다면 main()함수 하나에서가 아니라 함수 2개를 만들어서 만들면 위에처럼 하면 되지 않을까?.

근데 결과는 안바뀐다. 왜 안바뀔까?..

 

 

 

생각해보기..


위 시행착오를 통해 알 수 있는게 무엇이 있을까?

-1) 두 수가 안바뀐다

Why? 선언해 놓은 변수가 해당 선언된 함수에서만 바뀌니까.

Solution) 그러니까 아래의 분홍색 선으로 접근해줄 무언가가 필요하다

(각 회색 세로선의 범주에서 변수들은 움직일 수 밖에 없다.)

 

 

C언어 포인터 개념 예시

 

 

 

정 리


* 포인터란?

: 메모리에 주소값을 저장하고 있는 변수

 

* 왜 사용 할까?

: 메모리에 접근을 하기 위해서

 

* 그렇다면 메모리에 접근 하는 이유는 왜 일까?

: 메모리에 올라가면 자원이 공유가 되기 때문에

댓글