팔만코딩경
/
Library DB
/
C언어 기초문법(?)
/
C언어 9강. 포인터1 pointer
/
LIST
Search
Share
LIST
Gallery view
Search
CPU와 메모리 동작
•
핵심 : 메모리
주소
memory address → 데이터 위치
◦
주소
라는 부분은 유일한 부분이다.
◦
cpu는 메모리주소를 설정해서 읽어오는 역할을 가지고 있다.
◦
데이터는 각각의 메모리 주소를 가지고 있다.
메모리와 변수
•
데이터 저장하는 가장 기본 단위는 1byte 단위이다.
◦
1byte마다 메모리 주소가 지정이 된다.
•
메모리 영역을 쉽게 기억하고 사용할 수 있는 방법?
이름을 붙혀서 사용했다. 즉, 변수명 선언
다시 보는 변수의 의미?
포인터 기초
포인터의 기본 개념
•
포인터의 역할
임의의 메모리에 접근하여 값을 저장하거나 읽는 역할
•
포인터 변수?
메모리 주소를 저장
하는 변수
•
일반 변수와 포인터 변수의 공통점과 차이점
'*' 의 역할
•
(간접) 참조 연산자 ' * ' 의 역할과 의미
◦
선언된 변수가 포인터 변수임을 나타내는 역할
ex ) int pVar == int pVar;
◦
포인터 변수에 저장된 메모리 주소로
접근
한 메모리 영역의 데이터(값)를 의미
◦
참조를 접근으로 이해하자.
포인터 선언
•
선언 형식
데이터형 *변수명;
예) int *pPtr;
다수의 포인터 변수 선언 형식
int *pPtr1, *pPtr2, *pPtr3;
포인터란?
포인터 사용 예 1
•
포인터는 할당된 메모리에만 접근 가능
포인터 사용 예2
•
포인터를 이용하여 한 메모리에 접근 및 읽기, 저장 가능
•
포인터를 이용해서 메모리주소에 저장된 값을 바꿀 수 있다.
포인터의 다양한 예
임의의 메모리 할당 함수 malloc
•
void *malloc(size_t size);
m = 메모리 / alloc = 할당
size : 할당할 바이트, 'size _t == unsigned int'
◦
할당할 메모리 공간이 부족하면 NULL, 0 '\0' 리턴
◦
할당한 메모리의 첫번 째 주소를 리턴
◦
리턴형이 void * 이므로 형 변환을 통해 메모리 주소를 받아야 함
포인터의 메모리 할당과 해제
•
임의의 메모리 해제 free 함수
void free(void *memblock);
memblock : 해제할 메모리 주소
•
malloc(), free() 포함 헤더
stdlib.h 또는 malloc.h
•
메모리 계산 키워드 sizeof
데이터 형, 변수, 배열의 메모리 크기를 바이트 단위로 알려주는 키워드
•
형식
sizeof(변수 또는 데이터 형), sizeof 변수
sizeof(int), sizeof(변수명), sizeof(배열명)
sizeof를 사용한 메모리 할당과 scanf 사용 예
포인터를 활용한 메모리 생성과 해제
•
하나하나의 문자가 차례대로 메모리에 저장되어있는게 문자열이라고 한다.
문자열
•
문자열 다루기
◦
배열로 다루기
char string[10] = "abcdefg";
◦
포인터로 다루기
char *string = "abcdefg";
▪
포인터 선언에서만 가능
▪
읽기 전용
▪
값에 대한 변경 불가 읽기 전용
포인터
•
문자열 출력
문자열 다루기
•
포인터는 메모리를 활용하기 위한 하나의 변수이다.
◦
메모리를 사용하기 위해서 반드시 필요한게 메모리 주소이다.
◦
메모리 주소를 유일하게 다룰 수 있는게 포인터이다.
•
포인터는 메모리 주소를 저장하는 역할을 한다.
◦
포인터를 활용하면 더 많은 메모리를 한번에 다루거나 해제할 수 있다,
•
&변수는 변수의 메모리 주소를 의미하듯이 *포인터는 메모리 주소로 접근(참조)한 값을 의미한다.
•
변경되지 않는 문자열을 다룰 때 편리하다.
정리