반응형

안녕하세요, 

츄르 사려고 코딩하는 집사! 코집사입니다.


2019년 2월 4일부터 자료구조에 대해 글을 업로드를 하려고 합니다.

컴공에 있어서 자료구조는 절대로 빠질 수 없는 존재죠.

취업을 할 때도 코딩 테스트를 보는데 그 문제가 거의 자료구조에서 보기도 합니다.

이번 글에서는 메모리와 변수부터 기초를 쓰려고 합니다.


참고자료는 인프런의 부경대학교 IT융합응용공학과 권오흠 교수님의 자료구조 및 실습 강좌입니다.




컴퓨터의 메모리는 데이터를 보관하는 장소입니다.

바이트 단위로 주소가 지정되며, 모든 변수는 주소를 가집니다.

예를 들어, 우리가 C언어에서 변수를 선언할 때

int a= 1; 이런 식으로 사용을 합니다.

이 변수 a도 결국엔 메모리에 저장이 됩니다.






포인터란??

메모리 주소를 값으로 가지는 변수이다.

C언어에서 포인터 변수는 아래와 같이 사용한다.


ex) int * ptr; 


위와 같은 type으로 포인터를 사용합니다.

ptr은 포인터 변수의 이름이며, *는 ptr이 포인터 변수임을 알려주는 표시입니다.

앞의 int는 ptr 포인터 변수의 type입니다. 


위의 그림에서, int c = 12라고 선언을 하였습니다. 그러면, 컴퓨터 메모리에 1008번 주소에 int형 변수 c의 값 12를 저장하였습니다. 그리고, 포인터 변수 정수형 p는 c의 주소를 갖는 변수로 선언을 하였습니다. 그러면 1028번 주소에 p의 값(C의 주소값) 1008을 저장했다 라는 것을 의미합니다.



위의 그림을 보면, 

int x = 1, y = 2; 로 변수를 선언하였습니다. 1의 값을 가지는 x는 1028번 주소에, 2의 값을 가지는 y는 1024번 주소에 저장을 하였습니다. 

그리고, int형 포인터 변수 ip를 선언하였습니다. int형 포인터 변수 ip는 변수 x의 주소의 값을 갖는 포인터 변수가 되었습니다.


y= *ip는 주소를 가지고 있는 값을 가리킵니다. 즉, ip 변수에는 1028번의 주소를 가지고 있는데, *ip에서 *를 사용함으로 1028번의 주소를 가리키고 있는 값 1을 y에 저장하게 됩니다.


*ip는 x값의 주소를 가리키게 되니 *ip=0;이 되면 x값에 0을 넣어라 라는 말이 됩니다.





포인터와 배열


int a[10]; 은 정수형 배열 a를 10의 크기를 갖게 됩니다.

a[0] ~ a[9]까지의 크기를 갖게 됩니다.




위의 코드에서, int 형 calculate_sum이라는 함수를 만들었습니다. 이 함수의 인자에 int *array를 썼는데, 위에 보면 sum = calcualte_sum(num)이 있습니다. 즉, num[10]; 을 선언해주고, array는 num을 가리키는 포인터로 사용되었습니다.





int a[10];으로 배열을 선언을 했을 때, *a는 결국엔 a[0]과 같은 의미 입니다.


위의 그림에서, num[10]이라는 배열에 *array를 썼을 때, num[0]을 가리키는 그림을 보면 이해가 될 것입니다.


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기