Programming Learning Diary

포인터에 대한 이해

페이지 정보

작성일 19-11-22 13:43

본문

포인터란?


-위키백과

포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 포인터가 가리키는 값을 가져오는 것을 역참조라고 한다.

포인터는 어셈블리CC++파스칼 등 하위 레벨까지 제어할 수 있는 언어에서 주로 많이 쓰이며, 모듈라-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의 메모리 주소

}


cf49d8fa93f81b0daa8b974b61da08da_1574396840_9915.png


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);

}

}

cf49d8fa93f81b0daa8b974b61da08da_1574397788_7902.png
 


댓글목록

등록된 댓글이 없습니다.