1 / 14

포인터의 기초 (-.-)

포인터의 기초 (-.-). * 목 차. 포인터의 개념 및 정의 포인터의 용도 포인터 사용 주의사항 포인터 사용의 예. * 포인터의 개념. 포인터 변수 다른 객체 ( 변수 ) 의 메모리 주소를 저장하는 변수 - 예 : 변수 q 가 메모리의 100 번지에 위치하고 있다면 포인터 변수 p 는 100 의 값을 갖는다 . 포인터 변수의 선언 형식 : type * var -name; * : 포인터 변수를 생성한다는 것을 표시 예 ) int *p;.

len-griffin
Download Presentation

포인터의 기초 (-.-)

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. 포인터의 기초(-.-)

  2. * 목 차 • 포인터의 개념 및 정의 • 포인터의 용도 • 포인터 사용 주의사항 • 포인터 사용의 예

  3. * 포인터의 개념 • 포인터 변수 다른 객체(변수)의 메모리 주소를 저장하는 변수 - 예: 변수 q가 메모리의 100 번지에 위치하고 있다면 포인터 변수 p는 100의 값을 갖는다. • 포인터 변수의 선언 형식: type *var-name; * : 포인터 변수를 생성한다는 것을 표시 예) int *p;

  4. * 포인터의 개념(계속) • 포인터 연산자 * : 뒤에 오는 주소(포인터 변수의 내용)에 저장된 값을 반환한다. & : 뒤에 오는 변수의 주소를 반환한다. <예> int *p, q; q = 100; /* q에 100을 치환한다. */ p = &q; /* p에 q의 주소를 치환한다. */ printf("%d", *p); /* 포인터를 이용하여 q의 값을 출력한다. */

  5. * 포인터의 개념(계속) q = 100; p = &q; q p 100 q의 주소를 p에 치환 p가가르키는 것은 q의 주소이고,q의 값이100, p가 가르키는 값도 100

  6. * 포인터의 개념(계속) • 포인터 연산 <참고> *정수만 더하거나 뺄수있음 *괄호의 사용 유무에 따라 결과가 달라 진다. *p++ : p를 먼저 증가시킨 후, 새로운 위치에 있는 값을 액세스한다. (*p)++ : p가 가리키는 곳의 값을 증가시킨다. q q의 저장공간 q++ 4바이트 이동..(int)

  7. * 포인터의 개념(계속) • 이중 포인터 int *p, q, **pp; q = 100; p = &q; pp = &p; pp p q p의 주소를 pp에 치환 q의 주소를 p에 치환

  8. *포인터 사용 주의사항 • 초기화되지 않는 포인터를 사용하지 말것 <예> int *ptr; *ptr = 12;/* 잘못되었음 – ptr은어느 것도 가리키고 있지 않다. */ • 나누기, 곱하기, 퍼센트 등과 같은 수학의 연산을 금할것 • 변수 유형의 크기를 알아둘 것 • 배열 변수로 증감연산을 하지말것 <예> intptr[10]; ptr++ /* 잘못 된 사용 */ int *ptrl; ptrl = ptr; *ptrl++;

  9. * 포인터의 용도 • 참조에 의한 호출(Call By Reference) • 메모리의 동적인(Dynamic) 활용

  10. * 포인터의 용도(계속) • Call By Value void func(int a) { a = 1; //지역변수.. } int main() { int a = 3; func(a); printf("%d\n",a); return 0; } 결과 : 3

  11. * 포인터의 용도(계속) • Call By Reference void func(int* a) { *a = 1; } int main() { int a = 3; func(&a); printf("%d\n",a); return 0; } 결과 : 1

  12. * 포인터의 용도(계속) • 메모리의 동적인(Dynamic) 활용 포인터는 시작 주소만 갖기 때문에 포인터 자체는 많은 메모리 공간을 필요로 하지 않는다. <예> 충북대 학생의 인적 사항을 기록할 때…배열을 사용할 경우 넉넉하게 10000명정도 잡았다. 하지만.. 충북대 학생은 4700명 밖에 되지 않는다. 그러면 5300명의 메모리가 낭비된다. 포인터를 사용할 경우.. 처음주소의 메모리만 할당하고 그 뒤에 입력되는 만큼의 양의 메모리만 사용하면 된다.

  13. * 포인터의 사용 *참고 a[] = *a • 배열과 포인터 #include <stdio.h> inta[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; intmain(void) { int*p; p = a; /* p에 a의 시작 주소를 치환한다. */ /* 이 문장은 a의 첫째, 둘째, 셋째 원소들을 출력한다. */ printf("%d %d %d\n", *p, *(p+1), *(p+2)); /* 이 문장은 a를 사용하여 같은 것을 출력한다. */ printf("%d %d %d", a[0], a[1], a[2]); return 0;}

  14. * 포인터의 사용 • 문자열 과 포인터 #include <stdio.h> int main(void) { char *p ; p = "one two three" ; /* 해당 문장열의 테이블 주소를 p에 치환한다. */ printf(p) ; return 0; }

More Related