포인터란?
c언어에서 포인터란 주소값을 저장하는 변수이며, '포인터 변수' 라고도 부릅니다.
char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장합니다.
int n = 10;
int *ptr = &n;
printf("%d, %d", ptr, *ptr);
위의 코드에서, *prt = &n이라고 하여 마치 *ptr이라는 변수에 n의 주소값이 들어간 것처럼 보이나, 결과를 보면 알 수 있다시피,
[*포인터_변수명 = 주소값]과 같이 포인터 변수를 초기화하더라도 포인터_변수명에는 특정 주소값이 들어가는 것이고,
*포인터_변수명에는 특정 주소값내의 특정 값이 들어감을 알 수 있다.
포인터 연산자
C언어에서 포인터와 연관되어 사용되는 연산자는 다음과 같습니다.
1. 주소 연산자 (&)
2. 참조 연산자 (*)
1. 주소 연산자(&)
주소 연산자(&)는 변수의 이름 앞에 사용하여, 해당 변수의 주소값을 반환합니다.
2. 참조 연산자(*)
참조 연산자는 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환합니다.
*&는 아무것도 없는 것과 같다. &는 주소이며, *은 그 주소의 값이기 때문에, *&은 서로 상쇄된다.
고1 수학 (하)에서 배운 함수와 역함수를 떠올리면 이해가 쉬울 것 같다.
함수 y=f(x)에서, &는 특정 y값에 따른 x값을 나타내는 것, *은 특정 x값에 따른 y값을 나타내는 것으로 생각한다면,
y -> x -> y와 같이 순서도를 작성할 수 있고, 이는 곧 상쇄되는 것으로 생각할 수 있다. 말이 어렵다면 그냥 넘어가도 된다.
포인터의 선언
타입* 포인터이름; //포인터의 선언
타입* 포인터이름 = &변수명 //포인터 초기화. (포인터 변수에 주소저장)
포인터 변수는 저장된 그 값과 상호관계이다
예를 들어 이해를 쉽게 하겠다.
#include <stdio.h>
int main(void) {
int sg = 408;
int *wj = &sg;
*wj = 1121;
printf("%d", sg);
}
다음과 같은 코드가 있을 때, wj = &sg, *wj=sg라는 것을 알 수 있을 것이다.
그런데 이때, 나는 *wj라는 포인터 변수를 수정했음에도 불구하고
*wj와 연결이 되어있는 sg에 영향이 미친다는 걸 결과를 통해 확인할 수 있다.
이를 통해, 포인터 변수는 저장된 그 값과 상호관계라고 볼 수 있으며, 위의 코드에서는 *wj는 sg와 상호관계라고 볼 수 있다.
'프로그래밍 > C' 카테고리의 다른 글
[C언어] 배열은 주소값이다. (0) | 2023.05.18 |
---|---|
[C언어] 배열과 포인터 사이의 관계 (0) | 2023.05.16 |
[C언어] 배열 - 문자 vs 문자열 (0) | 2023.05.16 |
[C언어] 함수의 선언과 정의 (0) | 2023.05.15 |
[C언어] 반환값 return에 대하여 (0) | 2023.05.15 |