포인터에 대한 이해
페이지 정보
작성일 19-11-22 13:43본문
포인터란?
-위키백과
포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 포인터가 가리키는 값을 가져오는 것을 역참조라고 한다.
포인터는 어셈블리, C, C++, 파스칼 등 하위 레벨까지 제어할 수 있는 언어에서 주로 많이 쓰이며, 모듈라-2, 에이다와 같은 언어에서는 극히 제한적으로 사용되고, 자바, 에펠 등에서는 완전히 숨겨져 사용할 수 없다.
첫 번째 부류의 언어에서는 포인터를 메모리의 임의의 주소를 가리키도록 할 수 있으며 포인터의 연산도 가능하다.
일반적으로 포인터는 메모리 주소로 바꿀 수 있다. 포인터는 다른 변수나 함수를 가리키도록 사용된다.
-뇌피셜
내가 이해한 포인터에 대해서 써 내려가보도록 하겠다
변수에 값이 닮기면 메모리의 저장공간에 올라가게된다. 이때 공간의 주소를 가르키는 것이 포인터라고 이해했다.
다음은 기본 문법과 사용이다.
int main() {
char a = 10;
char *ptr_a=&a; //char 형 변수 a의 메모리 저장공간주소를 담는 포인터 변수*pre_a
printf("a의 값: %d\n", *ptr_a); //a 변수의 값 10
printf("a의 주소값: %d\n", ptr_a); //a 변수의 메모리 주소
}
좀더 나아가 포인터와 타입의 관계에 대해서 통해 말해보겠다
int main() {
char a = 10;
int b = 10;
char* ptr_a =&a;; //char 형 변수 a의 메모리 저장공간주소를 담는 포인터 변수*pre_a
int *ptr_b = &b; //int 형 변수 b의 메모리 저장 공간주소를 담는 포인터 변수*pre_b
printf("a의 주소값: %d\n", ptr_a); //a의 메모리 주소
printf("a+1의 주소값: %d\n", ptr_a+1);//a + 1의 메모리 주소
printf("b의 주소값: %d\n", ptr_b);
//b의 메모리 주소
printf("b+1의 주소값: %d\n:",ptr_b+1); //b+1의 메모리 주소
}
char 형 a의 주소값에 +1 이 되었을때 주소값이 1만큼 늘어난 것을 알 수 있고
int 형 b의 주소값에 +1 이 되었을때 주소값이 4만큼 늘어난 것을 알 수 있다
이를 통해 알 수 있는것이 타입에 따라 주소 메모리 공간의 차이가 다르고
포인터 주소에 +n 만큼 한다면 (변수타입의byte*n)만큼 늘어난 다는 것을 알 수 있다.
포인터를 배열을 통해 표현하여 위의 내용을 증명해보도록 하자
int main() {
printf("char형\n");
char arr2[10] = {1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < 10; i++) {
printf("%d\n", arr2 + i);
}
int arr[10];
printf("int형\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", arr + i);
}
}
댓글목록
등록된 댓글이 없습니다.