#include <stdio.h>
int main(void)
{
int n = 50;
int p = &n;
}
p라는 새로운 변수를 선언(n의 포인터라는 의미로)하고 그 안에 n의 주소를 저장함
어떤 변수에 주소를 저장하고 싶다면 그 변수의 자료형뿐만 아니라 별 연산자 또한 써줘야 함
int main(void)
{
int n = 50;
int *p = &n;
}
포인터 = ' * ', 이 연산자는 어떤 메모리 주소에 있는 값을 받아오게 해 줌
' * '를 이용해서 포인터 역할을 하는 변수를 선언할 수 있음(변수 p)
*p라는 포인터 변수 앞의 int는 이 포인터가 가리키는 값이 int라는 뜻(*p가 가리키는 주소가 n인데 n은 int형)
다른 float나 char 등 다양한 자료형에 대한 포인터도 있음
p를 출력하기
int main(void)
{
int n = 50;
int *p = &n;
printf("%p\n", p);
}
결과는 포인터 p의 값(변수 n의 주소)이 출력됨
포인터 p가 가리키는 변수의 값, 즉 변수 n의 값 출력하기
int main(void)
{
int n = 50;
int *p = &n;
printf("%i\n", *p);
}
앞에서 말했던 것 처럼 주소가 아니라 값을 가져오려면 ' * ' 연산자를 사용해야 함 그래서 p가 아니라 *p를 출력
정수(50)는 정수형 변수(n) 안에 존재하고 이 주소는 포인터 변수(*p) 안에 있지만 개념적으로는 이 변수(p)가 다른 변수(n)를 가리키는 것
실제 컴퓨터 메모리에서 변수 p는 아래와 같이 저장될 수 있음
실제로 p의 값, 즉 n의 주소 값을 생각하지 않고, 추상적으로 단지 p가 n을 가리키고 있다는 것만 생각해도 됨
이런 포인터를 기반으로 해서 앞으로 배울 다양한 데이터 구조를 정의하고 사용할 수 있음
https://everysmallstep.tistory.com/33
https://www.boostcourse.org/cs112/joinLectures/41307
'cs > CS50' 카테고리의 다른 글
5: 메모리-4(메모리 할당과 해제) (0) | 2021.12.03 |
---|---|
5: 메모리-3(문자열, 문자열의 비교와 복사) (0) | 2021.12.03 |
5: 메모리-1(메모리 주소) (0) | 2021.12.02 |
4: 알고리즘-8(병합 정렬:Merge sort) (0) | 2021.12.01 |
4: 알고리즘-7(재귀:Recursion) (0) | 2021.12.01 |