Vorsprung durch Technik

블로그 이미지

MSNU

C언어 - 포인터Pointer

myPPT 2016. 1. 10. 19:42











































포인터


학습목표

메모리 주소와 주소연산자 &

 주소(address)

 메모리 공간은 바이트마다 고유한 주소가 존재

 메모리 주소는 저장 장소인 변수 이름과 함께 기억 장소를 참조하는 또 다른 방법


 주소연산자 &(ampersand)

 &가 피연산자인 변수의 메모리 주소를 반환

 변수의 주소값은 형식제어문자 %u 또는 %d로 출력

 16진수로 출력하려면 형식제어문자 %p를 사용

주소의 출력

 address.c

 변수의 주소값 출력

포인터 변수 선언

 주소 저장 변수

 주소연산식 &data는 포인터 변수(pointer variable)에 저장하여 사용 가능

 즉 포인터 변수는 주소값을 저장하는 변수

 포인터 변수는 변수 선언에서 자료형 뒤에 *(asterisk)를 사용

 즉 다음 변수 선언에서 ptrint, ptrshort, ptrchar, ptrdouble은 모두 포인터 변수이며 간단히 포인터라고도 부름

 변수 자료형이 따라 그 변수의 주소를 저장하는 포인터의 자료형도 다름

포인터에 주소값 저장

 int *ptrint = &data;

 “포인터 변수 ptrint는 변수 data 를 가리킨다” 또는 “참조(reference)한다”라고 표현

 포인터 변수는 가리키는 변수의 종류에 관계없이 크기가 모두 4바이트

포인터 이용

 pointervar.c 

 포인터 변수 선언과 주소값 대입

포인터 선언과 NULL 포인터 

 여러 포인터 선언

 여러 개의 포인터 변수를 한 번에 선언하기 위해서는 다음과 같이 변수마다 *를 앞에 기술



 NULL 저장

 특별한 초기값이 없는 경우에 NULL로 초기값을 저장



 NULL 

 헤더 파일 stdio.h에 다음과 같이 정의되어 있는 포인터 상수로서 0번지의 주소값을 의미

 (void *)는 아직 결정되지 않은 자료형의 주소

간접 연산자 *

 *포인터

 포인터 변수가 가리키고 있는 변수를 참조하려면 간접연산자(indirection operator) *를 사용

 int *ptrint = &data;

• À§ ¼±¾ðÀ¸•Î Æ÷ÀÎÅÍ ptrint°¡ °¡¸®Å°´Â º¯¼ö°¡ data¶ó¸é *ptrintÀº º¯¼ö data¸¦ ÀǹÌ


간접 참조의 이용

 dereference.c

 포인터 변수와 간접연산자 *를 이용한 간접 참조


포인터 변수의 연산

 주소 연산

 포인터 변수는 간단한 더하기와 뺄셈 연산으로 주소를 수정

 포인터의 연산은 절대적인 주소의 계산이 아니며, 포인터가 가리키는 변수 크기에 비례한 연산

포인터 연산의 이용

 pointerarith.c

 포인터 변수의 간단한 덧셈 뺄셈 연산

 double형 포인터에 100이라는 주소값을 저장하려면 포인터 자료형으로 100을 변환하는 연산식 (double *) 100을 사용해 저장

포인터 변수의 이동

 배열 원소의 참조

 포인터 pa에 &a[0]를 저장하면 연산식 *(pa+i)으로 배열 원소를 참조

 특히 포인터 pa로도 배열과 같이 첨자를 이용하여 pa[i]로 배열 원소를 참조

참조연산자의 다양한 연산

 pointerpriority.c

 간접연산자와 증감연산자의 이용

 참조연산자 *의 우선순위는 ++p의 전위 증감연산자와 같고, 괄호나 p++의 후위 증감연산자보다 낮음

 그러므로 연산식 *p++는 *(p++)를 의미

• *p++´Â Æ÷ÀÎÅÍ p°¡ °¡¸®Å°´Â º¯¼ö¸¦ ÂüÁ¶Çϰí pÀÇ ÁÖ¼Ò¸¦ 1 Áõ°¡

• ¹Ý¸é (*p)++´Â Æ÷ÀÎÅÍ p°¡ °¡¸®Å°´Â º¯¼ö¸¦ ÂüÁ¶ÇÏ°í ±× °ªÀ» 1 Áõ°¡½ÃŰ´Â ¿¬»ê½Ä

포인터 변수의 형변환

 명시적 형변환

 포인터 변수는 동일한 자료형끼리만 대입이 가능

 만일 대입문에서 포인터의 자료형이 다르면 경고가 발생

 포인터 변수는 자동으로 형변환(type cast)이 불가능하며 필요하면 명시적으로 형변환을 수행 가능

 *pi로 수행하는 간접 참조는 pi가 가리키는 주소에서부터 4바이트 크기의 int형 자료를 참조한다는 것을 의미

다중 포인터

 이중 포인터

 포인터 변수의 주소값을 갖는 변수

 다시 이중 포인터의 주소값을 갖는 변수는 삼중 포인터

 이러한 포인터의 포인터를 모두 다중 포인터

 변수 선언에서 *를 여러 번 이용하여 다중 포인터 변수를 선언

이중 포인터의 이용

 multipointer.c

 이중 포인터를 이용한 변수의 참조

포인터 배열

 여러 포인터 모임

 주소값을 저장하는 포인터를 배열 원소로 하는 배열

 일반 배열 선언에서 변수 이름 앞에 *를 붙이면 포인터 배열 변수 선언

 포인터 배열 선언 시 초기값을 지정

 문장 double *dary[5] = {NULL};

포인터 배열 메모리 구조

 포인터 배열 pary

 int형 포인터 3개를 원소로 갖는 배열

포인터 배열 이용

 pointerarray.c

 포인터 배열 pary의 이용해 표준입력을 받아 다시 원래 변수 a, b, c로 출력

배열 포인터

 배열 주소를 저장

 int 형인 일차원 배열 int a[]의 주소는 (int *)인 포인터 변수에 저장

 열이 4인 이차원 배열 ary[][4]의 주소를 저장하려면

• Æ÷ÀÎÅÍ º¯¼ö ptrÀ» ¹®Àå int (*ptr)[4];•Î ¼±¾ð

배열 포인터와 포인터 배열

 배열 포인터

 int (*ptr)[4];

• ¿­ÀÌ 4ÀÎ ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ ¼±¾ð ¹®Àå

• °ýÈ£ (*ptr)Àº ¹Ýµå½Ã ÇÊ¿ä

 포인터 배열

 int *ptr[4]; 

배열 포인터 이용

 tdarypointer.c

 배열 이름 a는 포인터 상수

 변수 p는 포인터 변수

 배열 첫 원소를 참조하려면 

• **ptrÀ» ÀÌ¿ë

 연산식 **ptr++

• ¿¬»ê ¿ì¼±¼øÀ§¿¡ µû¶ó **(ptr++)¿Í °°À¸¸ç

• ÇöÀç Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ¿ø¼Ò¸¦ ÂüÁ¶ÇÏ°í ´ÙÀ½ ¿ø¼Ò•Î À̵¿ÇÏ´Â ¿¬»ê½Ä

일차원 배열과 포인터

 배열 이름을 이용한 참조 

 배열 score에서 배열 이름 score 자체가 배열 첫 원소의 주소값

일차원 배열과 포인터

 일차원 배열에서 배열 원소와 주소값을 참조

이차원 배열과 포인터

 배열 이름과 행 이름으로 참조

이차원 배열과 포인터

 연산식 (*td+n)

 배열의 (n+1)번째 원소의 주소값

 역참조연산자를 이용한 연산식 *(*td+n)은 배열의 (n+1)번째 원소 자체

다양한 배열 원소의 참조 방법

 포인터 상수: point

 포인터 변수: address

함수에서의 배열 전달

 함수 형식매개변수에서 배열 사용

함수 포인터

 함수 주소 저장 변수

 함수의 주소값을 저장하는 포인터 변수

함수 포인터를 이용한 함수 호출

 일반 함수 호출과 동일

함수 포인터 이용

 functionpointer.c

 함수 주소를 저장하는 함수 포인터의 선언과 사용

함수 포인터 배열

 함수 포인터를 위한 배열 선언과 사용 





'myPPT' 카테고리의 다른 글

마하트마 간디(Mohandas Karamchand Gandhi)  (0) 2016.01.15
사회 : 인국분포  (0) 2016.01.12
3D 입체영상 기술  (0) 2015.12.29
R 언어로 그래프 그리기  (0) 2015.12.26
Digital Convergence(디지털 컨버전스)  (0) 2015.12.22
Posted by MSNU






favicon

Vorsprung durch Technik

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (993)
    • myPPT (813)
    • 시리즈 (164)
      • 연소 (14)
      • 경제 (5)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바