공부 기록/C
C언어 기초부터 다시 씹어먹기 - (3) 포인터에 대해서
bumm
2024. 6. 16. 20:44
포인터란 주소값을 저장하는 기능임.
그런데 주소값이란 무엇인가?
주소값은 데이터가 저장된 메모리의 시작부분을 말한다.
이렇게 말하니 좀 어렵게 들린다. 쉽게 설명을 해보겠다.
그에 앞서 변수에 대해 알아보자.
변수는 정보를 저장하는 장소다.
만약에
int a = 10;
이 변수 a에 대해서 알아보자.
a라는 변수에 10이라는 값을 저장한 것이다.
그런데
int *p = &a;
라고 적힌 것을 발견한다.
해석하자면 포인터 p에 변수 a의 주소값을 저장한 것이다.
** & : 주소 연산자로 변수의 이름 앞에 사용하고 해당 변수의 주소값을 반환함.(앰퍼샌드ampersand라고 읽음)
그렇다면 주소값은 대체 무엇을 의미하는 것일까?
주소값은 데이터가 저장된 메모리의 시작부분을 의미한다.
#include <stdio.h>
int main() {
int a = 10; // 변수 a 선언 및 값 할당
int *p = &a; // 포인터 p 선언 및 a의 주소값 할당
// 변수 a의 값 출력
printf("Value of a: %d\n", a);
// 포인터 p를 통해 접근한 a의 값 출력
printf("Value via pointer p: %d\n", *p);
// 변수 a의 주소값 출력
printf("Address of a: %p\n", (void*)&a);
// 포인터 p가 저장하고 있는 주소값 출력
printf("Address stored in pointer p: %p\n", (void*)p);
return 0;
}
주소값에 대해 잘 설명해주고 있는 이미지를 첨부한다.
c언어에서는 이러한 주소값을 1바이트 크기의 메모리 공간으로 나누어 표현한다.
메모리는 1바이트(8비트) 크기의 작은 조각들로 나뉘어져 있다. 각 바이트마다는 고유한 주소를 갖는다.
예를 들어, int형 데이터는 4바이트 크기를 갖는다. 즉, 메모리에서 연속된 4개의 바이트를 사용하는 것.
주소값은 바로 이 int형 데이터가 갖는 4바이트의 첫 번째 바이트를 가리킨다.
요약
- 변수 : 값을 저장하는 장소
- 주소값 : 그 장소의 위치
- 포인터 : 그 주소값을 저장하는 변수
- 포인터를 사용하면 변수의 값에 직접 접근하지 않고 그 변수의 주소를 통해 간접적으로 접근할 수 있음.