티스토리 뷰
메모리와 포인터에 들어가기에 앞서, 메모리에 대해 간략하게 소개하겠습니다.
변수의 본질은 메모리이며 모든 메모리는 자신의 위치를 식별하기 위한 근거로 고유번호(일련번호)를 갖는데, 이 번호를 메모리의 주소라 합니다.
메모리의 종류
메모리는 그 용도에 따라 스택(stack), 힙(heap), 데이터 영역(data section), 텍스트 영역(text section) 등으로 나누어 집니다.
분류 |
특징 |
||
Stack | 자동변수이고 지역변수인 변수가 사용하는 메모리 영역 / 크기가 작고 관리(할당 및 반환)가 자동으로 이루어 지는 장점입니다. | ||
Heap | 동적 할당할 수 있는 자유 메모리 영역이며, 개발자 스스로 관리(수동)해야 합니다. 따라서 대량의 메모리가 필요하거나 필요한 메모리의 크기를 미리 알 수 없을 때 사용합니다. 제일 큰 영역입니다. | ||
PE image (실행영역) | Text section | C언어의 소스코드가 번역된 기계어가 저장된 메모리 영역이며, 기본적으로 읽기전용 메모리입니다. | |
Data section(Read only) | 상수 형태를 기술하는 문자열(예: "Hello")이 저장된 메모리 영역입니다. | ||
Data section(Read/Write) | 정적변수나 전역변수들이 사용하는 메모리 영역이며, 별도로 초기화하지 않아도 0으로 초기화됩니다. 관리는 자동이기 때문에 Heap 영역 메모리처럼 할당 및 해제를 신경 쓸 필요 없습니다. |
포인터 변수의 선언 및 정의
포인터 변수란 메모리의 주소를 저장하기 위한 전용 변수입니다.
메모리를 지정하는 방법에는 직접 지정과 간접 지정으로 나눌 수 있습니다.
ㄴ직접 지정의 사례로는 '변수 선언'을 사례로써 볼 수 있습니다.
간접 지정을 설명하기에 앞서 저희는 scanf() 함수를 사용할 시, '&nData'라는 형식의 주소 연산자를 사용합니다. 주소 연산자를 풀어보면 "이름이 nData인 메모리의 실제 주소는?"라고 해석할 수 있습니다. 주소 연산과 정반대 되는 개념의 연산자가 바로 '간접 지정 연산자(*)'입니다.
다시 설명해보면, 간접지정은 변경될 수 있는 임의의 기준주소로 상대적인 위치(주소)를 식별하는 방식입니다. 어떠한 기준을 근거로 상대인 메모리의 위치를 설명하는 방법이 '간접지정'이라고 교재는 설명하고 있습니다.
포인터 변수에 주소가 저장되는 방식은 Little Endian이라는 개념을 따릅니다.
#include<stdio.h>
int main(void) {
int x = 10;
// 변수 x를 가리키는 int형식에 대한 포인터 변수 선언 및 정의
// pnData 에 x의 주소가 저장
int* pnData = &x;
printf("x : %d\n", x);
// pnData 포인터 변수가 가리키는 대상 메모리를 int형 변수로 간접지정하고 20을 대입한다.
// 현재 가리키는 대상 메모리는 변수 x의 메모리이므로 x의 값은 20이 된다.
*pnData = 20;
printf("x : %d\n", x);
return 0;
}
*nTest = 20; 이러한 경우 저장된 주소의 값을 수정합니다.
*연산자는 *이름에 저장된 주소로 가 그 주소의 값을 수정, 참조할 수 있는 연산자라는 생각이 듭니다.
'언어 > C' 카테고리의 다른 글
메모리 동적 할당 및 관리 - 독하게 시작하는 C프로그래밍 (0) | 2019.09.19 |
---|---|
포인터와 배열 - 독하게 시작하는 C프로그래밍 (0) | 2019.09.18 |
[Inflearn C] 달팽이 배열 Snail_Array (0) | 2019.09.09 |
[Inflearn C] 배열과 교차의 구현 (0) | 2019.09.09 |
[Inflearn C] 선택 정렬, 버블 정렬 (0) | 2019.09.07 |
- Total
- Today
- Yesterday
- 회전리스트
- 1차원 배열
- 공부
- 직접 지정
- 간접 지정
- C
- 공용체
- inflearn
- 종류
- 3차원 배열
- 포인터
- call by value
- 재귀함수
- 알고리즘
- 파이썬
- 비트필드
- codeit
- 형승격
- 배열
- 시간복잡도
- 다차원 배열
- 프로그래밍
- timecomplexity
- 2차원 배열
- 자료구조
- call by reference
- 구조체
- 공간복잡도
- Algorithm
- 강의
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |