포인터
2021년 03월 25일
포인터 변수
-구체적으로 컴퓨터 메모리에 있는 자료 값, 변수, 함수의 주소를 가지는 변수
-다른 객체를 참조하기 위해 사용함
-변수의 크기에 따라 차지하는 메모리 공간이 다르다.
포인터를 사용하는 이유
일반적인 변수를 통해서도 메모리에 값을 저장하고 불러올 수 있지만
포인터를 사용하면 일반적인 방식에서 허용하지 않는 접근이 가능해져 매우 편리하다.
ex) 도서관에서 찾고자 하는 책의 위치를 저장하고 있는 인덱스를 먼저 접근한 후 실제 책이 있는 곳에 가서 책을 찾으면 효율적이다.
책 목록 - 데이터의 주소(포인터변수)
주소연산자 &
변수의 주소를 반환하는 연산자 &
메모리상의 주소값은 실행할 때마다 바뀔 수 있다.
#include <stdio.h>
int main(void) {
int a = 3;
printf("a의 값 : %d\n", a);
printf("a의 주소 : %p\n", &a);
}
// 결과
// a의 값 : 3
// a의 주소 : 00E0F7D4
포인터 선언
-포인터 변수 : 컴퓨터 메모리 상의 주소를 저장하는 자료형
int myInt
-> myInt : 정수형 자료값을 저장하는 메모리 공간의 이름
int *myPointer
-> myPointer : 정수형 자료값을 가지는 변수의 주소를 가지는 변수
#include <stdio.h>
int main(void) {
int* myPointer;
int myVar = 10;
myPointer = &myVar; //myPointer가 myVar변수의 주소 값을 참조
printf("*myPointer = %d\n", *myPointer);
printf("myPointer = %p\n", myPointer);
return 0;
}
// 결과
// *myPointer = 10
// myPointer = 012FFA84
포인터 변수 myPointer는 정수 값 10을 가진 myVar라는 변수를 가리킨다.
또는 myPointer는 myVar 변수를 참조한다.
간접 참조 연산자 *
포인터 변수가 가리키는 값을 가져오는 연산자
#include <stdio.h>
int main(void) {
int* myPointer;
int myVar = 10;
printf("myVar = %d\n", myVar);
myPointer = &myVar;
*myPointer = 20;
printf("myVar = %d\n", myVar);
return 0;
}
//결과
myVar = 10
myVar = 20
*myPointer : myPointer라는 포인트 변수가 가지고 있는 값
Tags