⭐ 포인터 pointer ⭐Permalink

고속 연산이 되어가면서 대용량의 데이터를 처리하기 위해 사용되는 데이터의 구조가 중요하게 되었습니다.

C언어에서 배우는 데이터 구조는 struct(구조체), array(배열), enum(열거형), pointer(포인터), function Pointer(함수 포인터)가 있습니다.


포인터란 무엇이고 포인트를 사용하는 이유는 무엇일까요?

우선 저희는 데이터 타입에 대해서 학습을 진행했습니다.

char , short, int , long , float , double

이때 char를 기준으로 데이터 크기는 -128~127 입니다.

stack 영역에서 데이터를 확인해 보겠습니다.

char a[100] = {0};
pointer Symbolic Address Value
  a[99] 0
  . . .  
  a[1] 0
a a[0] 0


포인터란 말 그대로 데이터를 가르키는 것입니다.

포인터는 가르키고 있는 주소를 값으로 넣어 8bit로 모두 동일한 크기를 가지지만,

타입 지정을 해줘야 하는 이유는 가르키고 있는 대상의 자료형 크기만큼 증가/감소를 진행해야하기 때문입니다.

int *pointer;
pointer + 1 = 1; // 포인터를 이동할 때 그 거리를 알기 위함


포인터는 배열과 매우 유사한 성격을 가지고 있습니다.

배열에서의 배열명은 첫 번째 앨리먼트의 주소값을 나타냅니다. 이 말은 즉, 배열에서의 배열명은 포인터라는 뜻 입니다.

하지만 포인터와 배열은 엄연히 다릅니다.

포인터는 +, -를 통해 데이터 접근을 하지만 배열은 인덱스를 통해 데이터를 접근하여 효율이 떨어지는 상황이 있을 수 있습니다.

배열은 인덱스 번호만 있으면 접근이 가능해서 효율이 좋은 상황이 있을 수 있다.

배열은 치환과 비교가 안되고 구조체는 치환은 가능하나 비교는 불가능 합니다.


포인터를 정확하게 학습하기 위해서는 Linked List를 그려보고 구현하는 연습을 진행합니다.Permalink

13

#include <stdio.h>

int main(void)
{
	int data = 1;
	int** phead;
	int* head;

	head = &data;
	phead = &head;

	printf("%d\\n", *phead);
	printf("%d\\n", head);
	printf("%d\\n", &data);

	printf("%d\\n", phead);
	printf("%d\\n", &head);

	printf("%d\\n", **phead);
	printf("%d\\n", data);

	return 0;
}



카테고리:

업데이트: