이신플러스의 달콤쌉싸름한 낙원

반응형

 

 

포인터의 활용

 

포인터를 사용하는 다양한 방법에 대하여 알아본다.

 

포인터 배열을 선언하고 사용하는 방법을 알아본다.

 

배열에 대한 포인터를 선언하고 사용하는 방법을 알아본다.

 

함수에 대한 포인터를 선언하고 사용하는 방법을 알아본다.

 

동적 메모리의 필요성과 활용방법을 알아본다

 

포인터 배열

(배열이란 호모지니어스 타입의 모임)

주소를 저장하는 배열

형식 데이터형*배열명[배열크기];

int*arr[5];

포인터 배열의 원소가 가리키는 변수에 접근하려면 간접참조 연산자*를 사용해야한다.

 

포인터 배열의 각 원소(포인터 변수)는 일반 변수가 아닌 배열을 가리킬 수도 있다.

int*arr[3]={x,y,z};

xyz는 배열의 주소

배열 x 배열 y 배열 z

 

arr[i][j]==*(arr[i]+j)

 

포인터 배열

int*p=NULL;

int x;

p = &x;

*p = 10;

 

p[0] =10;

int*p = NULL;

int x;

p= &x;

*p=10; 또는 p[0]* = 10;

 

int*형 변수의 용도

int y[5]; <-----------y와 &y[0]은 항상같다.

p=y; 

 

구조체에대한 포인터배열

std[3]

3개의 배열

각 구성요소가 구조체의 포인터

배열의 원소는 [0] [1] [2]라고 생각하고 접근한다.

포인터로 접근하기때문

->연산자 사용

 

구조체에대한 포인터 배열

주소값을 기억시켜야한다.

 

배열에대한 포인터

(배열전체를 가리키는 포인터)

int [ ]

int(*p)[5]; <-------- 크기가 5인 int 배열을 가리키는 포인터

 

char(*p2) [10]; <------ㅋ기가 10인 char 배열을 가리키는 포인터

 

포인터 배열과 배열에 대한 포인터

int*arr[5];

int(*p)[5];

 

배열 전체의 주소를 구하려면 배열 이름앞에 주소연산자(&)를 사용한다.

 

배열에 대한 포인터는 이차원 배열의 한 묶음으로 접근할수있다.

포이터 변수의 구별

배열의 원소를 가리키는 포인터와 배열 전체를 가리키는 포인터를 구분해서 사용해야한다.

 

두 포인터를 증가시키면 그 차이를 확인할 수 있다.

int x[5];

p1++; <-----p1은 int 하나 크기만큼 증가하므로 x[1]을 가리킨다.

int y[2][3];

p2++; <-----p2는 int 3개짜리 배열 크기만큼 증가하므로 y[1]을 가리킨다.

 

배열 원소를 가리키는 포인터와 배열 전체를 가리키는 포인터

 

함수에 대한 포인터 변수

함수의 주소를 저장하는 포인터 변수

포인터 변수는 함수를 가르킬수도 있다.

int(*pFunc)(int n); pFunc은 함수에 대한 포인터 변수

 

함수에 대한 포인터 변수로 함수를 호출하는 기본적인 형식

먼저 함수에 대한 포인터 형을 저의하고 이 데이터 형의 변수를 선언할 수 있다.

typedef를 이용한다.

 

호출할 함수의 이름을 미리 알 수 없을 때, 함수의 주소가 있으면 함수에 대한 포인터를 이용해서 함수를 호출할 수 있다. (생략)

 

void 포인터

void포인터란 주소는 주소인데데이터형을 알 수 없는 변수의 주소이다.

void *p= NULL; 데이터형을 알 수 없는 변수를 가리키는 포인터

 

qsort 함수는 생략

 

--동적 메모리--

정적메모리와 동적메모리

정적메모리는 메모리가언제 할당되고 해제될지, 얼마나 할당될 지가 컴파일 시간에 결정된다.

지역변수나 전역 변수

동적 메모리는 메모리가 언제 할당되고 해제될지,얼마나 할당될지가 실행 시간에 결정된다.

malloc으로 할당되는 메모리

정적 메모리                        동적메모리

메모리 할당    컴파일 시간에 이루어진다.        실행시간에 이루어진다.

메모리 해제    자동으로 해제된다.                명시적으로 해제해야 한다.

사용범위         지역 변수는 선언된 블록내        프로그래머가 원하는 동안만큼 동작

 

동적 메모리의 필요성

int arr[100]; 필요한 최대 크기만큼 배열을 할당한다.  (메모리가 낭비되거나 실행에러가 발생할 수있다.)

동적 메모리는 메모리의 할당과 해제 시점을 프로그래머가 선택할 수 있다.

 

동적 메모리의 할당 및 해제

동적 메모리를 할당하려면 malloc 함수를 사용하고, 동적 메모리를 해제하려면 free함수를 사용한다.

void *malloc(size_t size);

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading