6. 포인터

Download Report

Transcript 6. 포인터

포인터 (Pointer)
주소 (Address)
실제 Memory에 할당된 주소
 memory에 1B 단위로 부여된 번호
주소 표시법
 변수명 앞머리에 &를 붙임.
 16진수로 표시
Example :
 char a; printf(“%08x”, &a);
 배열로 연속된 저장 확인
Memory
포인터 (Pointer)
포인터란?
 주소를 저장하는 공간  해당 변수 지시
포인터 활용
 int a;
int* p;
p = &a;
// 포인터 선언
// p는 저장공간a를 지시한다.
// 같은 데이터형의 포인터만 지시 가능
*p = 20;
// 여기서 연산자*는 간접지정
// 저장공간a에 20할당
포인터와 배열
사례
int* p;
int a[ ] = { 10, 20, 30 }, int b;
p = a + 1; // a가 int형이므로 a주소에서 4B 증가시킨 주소
// pointer형을 구분하는 실익!
// char형은 1B씩
p = a++;
// error! a는 시작주소로 변경 불가
p++;
// p는 pointer
printf(“%d”, *(a+2) );
메모리 확보
정적 메모리와 동적 메모리의 비교
정적 메모리
동적 메모리
메모리 할당
컴파일 타임
초기 고정된 크기
실행 시간
가변적 크기
메모리 해제
자동으로
명시적으로
free( )
지역변수 : 선언 블록 내
전역변수 : 프로그램 전체
프로그래머가 원하는
동안
컴파일러
프로그래머
사용범위
메모리 관리책임
동적 메모리 할당
malloc( )
 포인터 변수 = (형변환) malloc(할당할 크기)
 malloc( )은 void형을 반환하므로 포인터에 맞는 타
입으로 형변환
 할당할 크기 = sizeof(타입) * 개수
 메모리 용량이 부족하여 할당에 실패하는 경우 malloc( )은
NULL을 반환한다.  예외처리 필요
free( )
 할당된 메모리 해제
 free( 포인터 변수 )
동적 메모리 할당
예제
char *buf;
buf = (char*) malloc( sizeof(char)*100 );
if( !buf ) // 메모리 확보에 실패했을 때
exit(1);
…
free( buf );
포인터 배열
포인터 배열
 char *s[3];
s[0] = “coffee”;
s[1] = “tea”;
다차원 배열과 구분
 char s[3][8] = {
“coffee”,
“tea”,
“water” };
실습
교재 예제
 p106
수시고사
 open book
End