[자료구조 & 알고리즘]

[자료구조 & 알고리즘] C언어의 포인터(pointer), 구조체(structure), 힙(heap), 스택(stack)

뽕규의 스케치북 2025. 5. 5. 14:41
728x90

포인터

개념

  • 자료의 메모리 주소를 담는 변수

생성방법

  • 자료형* 포인터변수;
  • int* ptr;
  • float* ptr
  • int a; int* ptr = &a;

연산자, 배열과의 관계성

  • 포인터에 ‘++’ 연산자 사용 시 해당 자료형의 바이트 수 만큼 주소값이 증가한다.
  • 배열을 선언 후 배열의 주소를 포인터 변수에 저장하면 포인터 변수는 배열의 첫번째 값의 주소를 갖는다.
  • 위 두가지를 활용하면 ‘++’, ‘—’ 연산자를 활용해 배열을 탐색할 수 있다.

구조체

개념

  • 사용자가 지정한 데이터 타입을 조합해서 만드는 사용자 정의 데이터 형식

사용방법 (2가지)

  • struct MyPoint { int a; int b; };

선언방법

  • struct Mypoint Point = {30,40}; struct Mypoint* ptr = Point;

데이터 접근방법

  • Point.a
  • Point.b
  • ptr→a (포인터를 사용하여 값에 접근 시 → 를 사용해야함)
  • ptr→b (포인터를 사용하여 값에 접근 시 → 를 사용해야함)

typedef 사용방법

  • typedef struct Mypoint { int a; int b; } Type;

typedef 선언방법

  • Type Point = {30,40};
  • typedef 사용 시 ‘struct MyPoint’를 선언 할때마다 사용하지 않고 ‘Type’이라고 지정한 별칭을 사용해서 선언이 가능하다

메모리 레이아웃

형태

스택

-자동메모리 영역
 
 
-자유메모리 영역
데이터
텍스트

설명

  • 텍스트 - 실행될 코드 저장공간
  • 데이터 - 전역 변수나 정적 변수 저장
  • 스택 - 스택 ADT → 선입후출, 후입선출 개념, 코드 블록 안 지역변수 설정 시 자동으로 메모리에 올라갔다가 자동으로 메모리 해제됨
  • 힙 - 사용자가 지정하여 메모리를 직접 할당하여 사용할 수 있는 공간, 스택처럼 자동으로 메모리 할당 해제가 되지 않기 때문에 사용자가 직접 메모리 해제 명령을 내려야함. 메모리에 남아있는 쓸모없는 공간을 누수(leap)이라고 부름
728x90