들어가기 전 포인터란 무엇인가에 대해 간단하게 알아보자면 배열이나 값의 메모리 속 주소를 저장해주는 것입니다.
#include <stdio.h>
int main(){
int *point;
int* point1;
int * point2;
// 포인터 선언
int n = 10;
//일반 변수
point = &n;
printf("%d", point);
}
들어가기 전 포인터와 이 간단한 코드에 대해서 이해하기 위해서 몇가지를 알려드리겠습니다.
참조연산자란?
참조 연산자는 * 을 말하며 포인터의 이름이나 변수의 주소 앞에 사용하여,
포인터에 가리키는 주소에 저장된 값을 반환합니다.
위 코드에서는 *point , 등으로 포인터 변수를 만드는데 사용해 주었습니다만 3개의 포인터 변수들에 참조연산자의 위치가 모두 다른것을 볼 수 있으신데 이렇게 하더라도 포인터 변수는 아무런 문제 없이 생성이 된다는 것을 알 수 있습니다.
주소연산자란?
주소 연산자는 &(앰퍼샌드) 을 말하며 변수의 이름앞에 사용되어 변수의 주소값을 반환합니다.
위 코드에서는 포인터 변수 안에 n의 주소값을 넣기 위해 point = &n의 형식으로 사용된 것을 볼 수 있습니다.
위 개념들을 알았다면 기초부터 포인터에 대해 알아보도록 하겠습니다.
포인터의 선언
포인터의 선언은 위에서 보다시피 다른 변수들과 비슷하게 [(변수형)]+[ *(참조연산자)]+[변수이름] 으로 선언해주시면 됩니다. ex> int *num;
위 과정들을 알았고 그렇다면 위의 코드의 실행결과는 어떻게 될까요
이렇게 n의 주소값이 출력 됩니다. 주소연산자로 n의 주소를 포인터 변수에 넣어주었기 때문에 이렇게 출력이 되는 것입니다.
#include <stdio.h>
int main(){
int *point;
// 포인터 선언
int n = 10;
//일반 변수
point = &n;
printf("%d", *point);
}
이 코드의 출력값을 어떻게 될까요
에구머니나 n의 입력값이 출력이 되네요. 그 이유는 포인터의 참조연산자에 있습니다. 아까 전의 코드에서는 point를 출력했기 때문에 n의 주소값이 출력이 됐습니다. 하지만 여기서 참조연산자를 사용해주어서 n의 주소값에 저장되어 있는 입력값을 참조해 올 수 있던 겁니다.
#include <stdio.h>
int main() {
int * point;
int *point1;
int* point2;
// 포인터 선언
int n = 10;
point = &n;
point1 = point;
printf("%d", *point1);
}
따라서 이렇게 하더라도 똑같이 n의 값 10이 나오는 마법을 볼 수 있습니다.
'C,C++' 카테고리의 다른 글
2167번 2차원 배열의 합 (0) | 2021.07.21 |
---|---|
11047번 동전0 (0) | 2021.06.19 |
10773번 제로 C (0) | 2021.06.15 |
풀어보려 시도 해본 문제들 (백준 : 1009번, 14647번, 2136번) (0) | 2021.06.09 |
백준 20492번 세금 (0) | 2021.06.09 |