1 / 16

C 언어 (9)

C 언어 (9). 정명희. 포인터. 포인터 어떤 변수의 메모리 주소 배열변수명은 그 배열이 할당 받은 메모리의 선두주소 배열변수명 역시 포인터 포인터 (pointer) 는 메모리상의 어떤 주소를 가리키고 , 메모리상의 주소에는 데이터가 저장되므로  결국 포인터는 메모리에 저장된 데이터의 위치를 가리킴 함수의 한계 극복 연결 리스트 (linked lsit) 나 이진트리 (binary tree) 등 자료구조를 구현하는데 폭 넓게 사용. ch 의 포인터 : 1245052 in 의 포인터 : 1245048

julio
Télécharger la présentation

C 언어 (9)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C언어 (9) 정명희

  2. 포인터 • 포인터 • 어떤 변수의 메모리 주소 • 배열변수명은 그 배열이 할당 받은 메모리의 선두주소 • 배열변수명 역시 포인터 • 포인터(pointer)는 메모리상의 어떤 주소를 가리키고, 메모리상의 주소에는 데이터가 저장되므로  결국 포인터는 메모리에 저장된 데이터의 위치를 가리킴 • 함수의 한계 극복 • 연결 리스트(linked lsit)나 이진트리(binary tree)등 자료구조를 구현하는데 폭 넓게 사용.

  3. ch의 포인터 : 1245052 in의 포인터 : 1245048 db의 포인터 : 1245040 포인터(주소연산자) • 특정 변수의 포인터를 구하기 위해서 주소연산자(&)사용. char ch; int in; double db; printf(“ch의 포인터 : %u\n”, &ch); printf(“in의 포인터 : %u\n”, &in); printf(“db의 포인터 : %u\n”, &db); // char형 변수의 주소값 // int형 변수의 시작 주소값 // double형 변수의 시작 주소값

  4. 포인터 변수 (1) • 주소를 가리키며, 주소를 저장하는 변수 • 일반 변수와 달리 포인터 변수에는 오직 주소만 저장 • 사용하기 전에 선언 • 변수와 같이 저장된 값을 다른 주소로 변경 가능 • 선언 • 데이터 형과 변수 이름 사용 • 변수 앞에 간접(indirection) 연산자 * 사용 • 데이터형 * 포인터 변수 • 예) char *p • 포인터 변수 p의 데이터형이 char 가 아님 • P가 가리키데 될 주소에 저장된 데이터의 형이 char형임

  5. 포인터 변수 (2) • 포인터의 선언 • 자료형 * 변수명; • 예) int *ptr;

  6. 포인터 변수 (3) • 포인터 연산자 • & • & 다음에 표시된 변수의 주소를 나타냄 • * • 포인터가 가리키는 곳의 값을 나타냄 • 예제) • p=&i : 변수 i의 주소를 포인터 변수 p에 저장 • printf(“%u”,p) : 포인터 변수 p에 저장된 값(주소)를 출력 • printf(“%d”,*p) : 포인터 변수 p가 가리키는 주소에 저장된 값을 출력 • *p=4 : 포인터 변수 p가 가리키는 주소에 저장된 값을 4로 대체

  7. char ch; int in; double db; *&ch = ‘P’; *&in = 100; *&db = 3.14; printf(“변수 ch에 저장된 문자 : %c\n”, ch); printf(“변수 in에 저장된 값 : %d\n”, in); printf(“변수 db에 저장된 값 : %lf\n”, db); // 포인터 &ch가 가리키는 기억공간에 ‘P’를 저장한다. // 포인터 &in이 가리키는 기억공간에 100을 저장한다. // 포인터 &db가 가리키는 기억공간에 3.14를 저장한다. 변수 ch에 저장된 문자 : P 변수 in에 저장된 값 : 100 변수 db에 저장된 값 : 3.140000 포인터 변수 (4) • 포인터를 통해서 기억공간을 사용하기 위해서 참조연산자(*) 사용

  8. 포인터 변수 (5) • 예) int a = 10; int *ap = &a; printf(“%d”, a); printf(“%d”, *ap); printf(“%u”, &a); printf(“%u”, ap); printf(“%u”, &ap);

  9. 배열과 포인터 (1) • 배열은 첫번째 배열요소의 포인터만 알면 나머지 배열요소의 포인터도 쉽게 알 수 있다. • 각 배열요소의 포인터에 참조연산자를 사용하면 모든 값을 참조할 수 있다.

  10. 배열과 포인터 (2) • 포인터(변수)로 배열요소를 참조하는 방법. • 배열명을 사용한 배열표현 • 배열명을 사용한 포인터표현 • 배열명을 저장한 포인터변수를 사용한 포인터표현 • 배열명을 저장한 포인터변수를 사용한 배열표현

  11. 문자열과 포인터 (1) • 문자열의 초기화 • 배열 또는 포인터를 이용 • [방법 1] • 배열의 초기화에서만 사용 가능함. • 배열 크기 생략가능. • 배열 이름인 str1이 문자열 "copy"의 시작 주소를 가리키는 포인터 상수 • str1="test"; 와 같이 다른 문자열 대입가능. • 배열의 크기를 지정하는 경우에는 문자열 길이보다 하나 더 크게 지정 • [방법 2] • 포인터 변수 str2는 변수이므로 다른 주소를 대입하거나 연산가능 • 포인터 변수는 문자열 자체를 보관하는 것이 아니라 그 문자열이 저장된 첫 번째 주소를 보관

  12. 문자열과 포인터 (2) • 포인터 배열 • 여러 개의 포인터 변수를 배열로 사용하는 것 • 문자열을 저장할 때 배열과 포인터의 차이 • 문자열을 2차원 배열에 저장하는 경우 • 저장할 문자열의 최대 길이를 고려하여 배열의 크기를 선언 • 문자열의 길이가 길던 짧던 간에 동일한 크기의 공간에 저장됨 • 기억 공간의 낭비가 생김 • 문자열을 포인터 배열에 저장하는 경우 • 포인터 배열 요소에는 저장될 문자열의 시작 번지만 저장됨

  13. 문자열과 포인터 (3)

  14. 문자열과 포인터 (4) • const 키워드 • const 키워드를 이용하여 변수를 상수화 시킬 수 있다. • ptr1은 포인터 변수가 참조하는 영역을 상수화 하였으므로 값을 변경할 수 없다. 그러나 변수 자신은 새로운 주소로 변경될 수 있다. • ptr2는 포인터 변수가 참조하는 영역은 변경할 수 있다. 그러나 변수 자신이 상수화 되므로 변수에 새로운 주소를 저장할 수 없다. const int *ptr1=# // 주소가 참조하는 내용 변경 불가 int * const ptr2=# // 포인터 변수에 저장된 주소 변경 불가

  15. 포인터와 함수 (1) • 일반적으로 포인터는 어떤 변수의 주소를 가리킴 • 함수의 주소에 대해서도 포인트 가능 • C 언어에서 문자열 상수, 배열의 이름 그리고 함수의 이름은 모두 포인터 상수임 • C 언어에서 함수의 이름은 그 함수가 시작되는 주소를 나타내는 포인터 상수이므로 함수 포인터를 사용하여 함수를 인자로 전달할 수 있음 • 포인터 pt는 함수의 시작 주소를 저장할 수 있는 함수 포인터 • 사용자 정의 함수가 int plus(int x, int y);라고 정의되어 있다면 함수 plus()의 시작 주소를 함수 포인터에 저장할 수 있으며, 함수 이름을 대신하여 호출할 수 있다.

  16. 포인터와 함수 (2) • 함수의 결과(반환) 값으로 포인터를 반환하는 함수 • 함수들이 정상적으로 처리될 경우에는 특정 주소를 반환하고, 오류가 발생되면 대부분 NULL을 결과 값으로 반환

More Related