본문 바로가기

카테고리 없음

메모리와 포인터 - 독하게 시작하는 C 프로그래밍

 

 

메모리 종류

- Stack  : 자동변수, 지역변수, 보통 1MB

- Heap : 동적 할당 메모리 -> Run 타임에 실행되는 메모리 

- 실행 코드

    - text section

    - data section

 

 

포인터 변수

- 변수는 변수인데, 메모리의 주소를 집어넣는 변수

- 64bit 시스템에서 주소 상수, 포인터 변수는 모두 64 bit (8bytes)

-> char ch = 'a'; (문자 a를 저장)

char *pszData = &ch;

'a'가 들어간 이름이 ch인 메모리의 주소를 pszData에 저장. 

이때 pszData의 이 이름 자체를 또 저장하는 메모리 공간이 있나? 

 

직접 지정과 간접 지정

 

 

포인터와 1차원 배열

포인터 & 1차원 배열이 매우 유사함. 

같이 자주 쓰임. 

- 간접 지정 연산 (*)의 결과는 형식이 있는 변수로 생각할 수 있음. 

포인터 변수나 배열 이름에 대해 덧셈, 뺄셈 연산 할 수 있음. 

이때 덧셈 + 1은 주소값에 +1이 아닌, 한 개를 더 한다,

= 한 칸 주소를 이동한다라고 볼 수 있다. 

포인터 변수에 대해서는 단항 증/감 연산도 가능.