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
'[자료구조 & 알고리즘]' 카테고리의 다른 글
[자료구조 & 알고리즘] C언어 더블 포인터 뜯어보기 (0) | 2025.05.08 |
---|---|
리스트 ADT / SLL / DLL / CDLL (0) | 2025.05.05 |