PowerPoint 프레젠테이션

Similar documents
Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap10-함수의활용.pptx

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

11장 포인터

설계란 무엇인가?

untitled

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - 제11장 포인터(강의)

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-11.pptx

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

Data Structure

Microsoft PowerPoint - 제11장 포인터

02장.배열과 클래스

PowerPoint 프레젠테이션

PowerPoint Template

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - Chapter_08.pptx

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - chap06-5 [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

OCW_C언어 기초

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

ch15

Infinity(∞) Strategy

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - ch07 - 포인터 pm0415

13 주차문자열의표현과입출력

11장 포인터

설계란 무엇인가?

Microsoft PowerPoint - chap06-4 [호환 모드]

Microsoft PowerPoint - 제9강 문자열

PowerPoint Presentation

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

11장 포인터

C++ Programming

KNK_C_05_Pointers_Arrays_structures_summary_v02

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

歯7장.PDF

chap7.PDF

PowerPoint 프레젠테이션

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

6.1 Addresses and Pointers Recall memory concepts from Ch2 ch6_testbasicpointer.c int x1=1, x2=7; double distance; int *p; int q=8; p = &q; name addre

Microsoft PowerPoint - chap03-변수와데이터형.pptx

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

PowerPoint 프레젠테이션

C 언어 프로그래밊 과제 풀이

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

8장. 포인터

ABC 6장

YRRZBRRLMCEQ.hwp

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - C_9장 포인터 pptx

Microsoft PowerPoint - 06_(C_Programming)_(Korean)_Characters_Strings

PowerPoint Presentation

문서의 제목 나눔명조R, 40pt

PowerPoint Presentation

Microsoft PowerPoint - chap06.ppt


Microsoft PowerPoint - chap12-고급기능.pptx

ABC 6장

untitled

: 1 int arr[9]; int n, i; printf(" : "); scanf("%d", &n); : : for(i=1; i<10; i++) arr[i-1] = n * i; for(i=0; i<9; i++) if(i%2 == 1) print

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

untitled


Microsoft PowerPoint - [2009] 02.pptx

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Data Structure

03장.스택.key

Microsoft PowerPoint - additional01.ppt [호환 모드]

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

C 프로그래밊 개요

Microsoft PowerPoint - 7장 배열 pptx

chap 5: Trees

<4D F736F F F696E74202D D20B9AEC0DABFAD2C20BDBAC6AEB8B2B0FA20C6C4C0CF20C0D4C3E2B7C2>

Microsoft PowerPoint - 10장 문자열 pptx

Microsoft PowerPoint - chap04-연산자.pptx

Transcription:

Chapter 10 포인터

01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열

변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다.

1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐 포인터예 int i = 3; int * ptr = &i; 일반변수의주소는 & 연산자를이용하여표현 Page 4

1.1 포인터선언 포인터예 포인터변수의크기는 4 바이트로 char * 나 double * 로선언 char* ptr1; int* ptr2; double* ptr3; * 는선언하려는자료형과포인터변수명사이에만위치하면됨. int* ptr1; int *ptr2; int * ptr3;; Page 5

1.1 포인터선언 포인터의의미 포인터변수는메모리의위치를가리킨다는의미에서포인터 (pointer) 라부름. Page 6

1.2 포인터를이용한일반변수로의접근 포인터를이용한일반변수로의접근 포인터는일반변수의주소와같음. 포인터를통해일반변수의값으로접근 Page 7

1.2 포인터를이용한일반변수로의접근 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i = 10; 06 int *ptr = &i; 07 08 printf("ptr 의주소값 : %p\n", &ptr); 09 printf("i 의주소값 : %p\n", &i); 10 printf("i 의주소값 : %p\n\n", ptr); 11 12 printf("i 의값 : %d\n", i); 13 printf("i 의값 : %d\n", *ptr); 14 15 return 0; 16 } Page 8

1.2 포인터를이용한일반변수로의접근 포인터를이용한연산 포인터를이용하여포인터가가리키는곳의값을바꾸거나연산도가능 int i = 3; int *ptr = &i; *ptr = i+2; // 포인터를통해 i 값을바꾸었다. Page 9

1.2 포인터를이용한일반변수로의접근 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int i = 10; 06 int *ptr = &i; 07 08 *ptr = i + 20; 09 printf("i 값 : %d \n", i); 10 11 i = i + 20; 12 printf("i 값 : %d \n", *ptr); 13 14 return 0; 15 } Page 10

1.3 포인터의유용성 01 #include <stdio.h> 02 03 void Swap(int a, int b); 04 int main(void) 05 { 06 int x = 10, y = 5; 07 printf("swap() 함수실행전 \n"); 08 printf("x = %d, y = %d 이다.\n\n", x, y); 09 10 Swap(x, y); 11 printf("swap() 함수실행후 \n"); 12 printf("x = %d, y = %d 이다.\n", x, y); 13 14 return 0; 15 } 16 17 void Swap(int a, int b) 18 { 19 int temp; 20 temp = a; 21 a = b; 22 b = temp; 23 } Page 11

1.3 포인터의유용성 포인터를사용하지않은프로그램 변수 x, y 는 main( ) 함수에서선언한지역변수이기때문에메모리에살아있어 원래값그대로출력 Page 12

1.3 포인터의유용성 포인터를사용한프로그램 포인터를함수의인자로사용하면주소값을전달할수있으므로변수자체가 함수에전달되어두수의값을바꿀수있음. Page 13

1.3 포인터의유용성 01 #include <stdio.h> 02 03 void Swap(int* a, int* b); 04 int main(void) 05 { 06 int x = 10, y = 5; 07 printf("swap() 함수실행전 \n"); 08 printf("x = %d, y = %d 이다.\n\n", x, y); 09 10 Swap(&x, &y); 11 printf("swap() 함수실행후 \n"); 12 printf("x = %d, y = %d 이다.\n", x, y); 13 14 return 0; 15 } 16 17 void Swap(int* a, int* b) 18 { 19 int temp; 20 temp = *a; 21 *a = *b; 22 *b = temp; 23 } Page 14

2.1 인자를값으로전달 인자를값으로전달 (call by value) C 언어의대표적인인자전달방식 함수가호출되면인자값을스택 (stack) 에복사 값을복사하기때문에함수에서인자값을바꾸더라도 main( ) 함수는영향을받지않으므로두함수는독립적이고안전함. Page 15

2.2 인자를주소로전달 인자를주소로전달 (call by reference) 전달하려는변수의주소를함수에전달 함수에변수자체를전달해야할때사용 ( 포인터이용 ) 주소연산자 (&) 를이용하여변수의주소값을함수에넘겨주고, 간접연산자 (*) 를이용하여주소값이가리키는값을읽거나저장 Page 16

2.2 인자를주소로전달 01 #include <stdio.h> 02 03 void CountIncrement1(int n); // 값을전달 04 void CountIncrement2(int* n); // 주소를전달 05 int main(void) 06 { 07 int a = 10; 08 printf("a 의초깃값 : %d\n", a); 09 10 CountIncrement1(a); 11 printf("countincrement1 함수실행후 a 의값 : %d\n", a); 12 13 CountIncrement2(&a); 14 printf("countincrement2 함수실행후 a 의값 : %d\n", a); 15 16 return 0; 17 } 18 19 void CountIncrement1(int n) 20 { 21 n++; 22 } 23 24 void CountIncrement2(int* n) 25 { 26 (*n)++; 27 } Page 17

3.1 포인터와배열의관계 배열을이용하여포인터를초기화하는방법 [ 배열첨자이용 ] int a[4] = [10, 20, 30, 40]; int *p; p = &a[0] [ 배열명이용 ] p = a; 배열과포인터의대응관계 Page 18

3.1 포인터와배열의관계 배열의주소를표현하는방법 배열의값을표현하는방법 Page 19

3.1 포인터와배열의관계 포인터와배열의관계 *a 와 a[0] 은같은의미 *p 는포인터변수 p 가가리키는곳에들어있는값을의미하므로 a[0] 과같음. 포인터를이용하여값을표현할때주의할점 *p+1 *(p+1) Page 20

3.1 포인터와배열의관계 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int a[] = {10, 20, 30, 40, 50}; 06 int *p = a; 07 int i; 08 09 printf(" 배열명 a 를이용한주소표현 \n"); 10 for(i = 0; i < 5; i+ +) 11 printf("a[%d] 의주소 %p\n", i, a + i); 12 13 printf("\n 포인터 p 를이용한배열주소표현 \n"); 14 for(i = 0; i < 5; i+ +) 15 printf("a[%d] 의주소 %p\n", i, p + i); 16 17 printf("\n 포인터 p 를이용한배열값표현 \n"); 18 for(i = 0; i < 5; i+ +) 19 printf("a[%d] = %d\n", i, *(p + i)); 20 21 return 0; 22 } Page 21

3.2 증감연산자적용 포인터와배열명에서증감연산자의의미 p++ : 포인터 p가가리키는곳의다음주소를의미 *p++ : 포인터 p가가리키는곳의다음주소안에들어있는값을의미 a++ : 배열명 a는상수이므로증감연산자를사용할수없음. Page 22

3.2 증감연산자적용 01 #include <stdio.h> 02 03 int main(void) 04 { 05 int a[] = {11, 22, 33, 44, 55}; 06 int *p = a; 07 08 printf("*p 의값 = %d\n", *p); 09 p++; 10 11 printf("*(p+1) 의값 = %d\n", *p); 12 p++; 13 14 printf("*(p+2) 의값 = %d\n", *p); 15 p--; 16 17 printf("*(p+1) 의값 = %d\n", *p); 18 19 return 0; 20 } Page 23

3.2 증감연산자적용 배열의합을구하는함수의예 배열전체의값이전달되기때문에메모리의이동량이많아짐. int SumArray(int Array[], int Size); int main(void) { int a[] = {10, 5, 15, 25, 7}; int Sum; Sum = SumArray(a, 5); return 0; } int SumArray(int Array[], int Size) { int result = 0, i; for(i = 0; i < Size; i+ +) result += Array[i]; return result; } // 함수선언 // 함수호출 // 함수정의 Page 24

3.2 증감연산자적용 포인터를이용하여배열의합을구하는함수의예 4 바이트크기의포인터변수만메모리로이동 int SumArray(int* pa, int Size); int main(void) { int a[] = {10, 5, 15, 25, 7}; int Sum; Sum = SumArray(a, 5); return 0; } int SumArray(int* pa, int Size) { int result = 0, i; for(i = 0; i < Size; i+ +) result += pa[i]; return result; } // 함수선언 // 함수호출 // 함수정의 Page 25

3.2 증감연산자적용 01 #include <stdio.h> 02 03 int SumArray(int* pa, int Size); 04 int main(void) 05 { 06 int a[ ] = {10, 5, 15, 25, 7}; 07 int Sum; 08 Sum = SumArray(a, 5); // 함수호출 09 printf(" 배열의합 : %d \n", Sum); 10 11 return 0; 12 } 13 14 int SumArray(int* pa, int Size) 15 { 16 int result = 0, i; 17 18 for(i = 0; i < Size; i+ +) 19 result += pa[i]; 20 // result += *(pa + i); 21 // result += *pa+ +; 22 23 return result; 24 } Page 26

3.2 증감연산자적용 배열의합을구할때계산식을표현하는방법 pa[i], *(pa + i), *pa++ 는같은의미 *pa++ : * 보다 ++ 연산자의우선순위가빨라배열의원소값을나타낼수있음. (*pa)++ : pa가가리키는곳의값을연산후에 1만큼증가시킨다는의미 [ 예제 10-8] 의 for 문을아래와같이작성하면원하는결과가나오지않음. for(i = 0; i < Size; i+ +) result += (*pa)+ +; Page 27

4.1 포인터를이용한문자열표현 포인터를이용한문자열선언방법 char * 포인터명 = " 문자열 "; char *p = "MOON"; Page 28

4.1 포인터를이용한문자열표현 01 #include <stdio.h> 02 03 int main(void) 04 { 05 char *pc = "C programming"; 06 printf(" 문자열을변환기호를이용해서출력 \n"); 07 printf("%s\n", pc); 08 printf(" 반복문을이용해한글자씩출력 \n"); 09 while(*pc) 10 printf("%c", *pc+ +); 11 printf("\n"); 12 13 return 0; 14 } Page 29

4.1 포인터를이용한문자열표현 배열포인터 문자열을동시에여러개만들어야하는경우유용 char *pstr[3] = {"english", "math", "korean"}; Page 30

4.1 포인터를이용한문자열표현 배열포인터 불필요한메모리낭비를막을수있기때문에배열의크기를초기에지정하지않아도됨. char *pstr[3] = {"english", "math", "korean"}; 2 차원배열을이용하면문자가가장많은문자열이기준이되기때문에메모리 낭비가발생 char Str[ ][8] = {"english", "math", "korean"}; Page 31

4.1 포인터를이용한문자열표현 01 #include <stdio.h> 02 03 int main(void) 04 { 05 char *pstr[] = {"english", "math", "korean"}; 06 char subject[][8] = {"english", "math", "korean"}; 07 int i; 08 printf(" 포인터배열을이용해서문자열을출력합니다.\n"); 09 for(i = 0; i < 3; i+ +) 10 printf("pstr[%d] = %s\n", i, pstr[i]); 11 12 printf("2 차원배열을이용해서문자열을출력합니다.\n"); 13 for(i = 0; i < 3; i+ +) 14 printf("subject[%d] = %s\n", i, subject[i]); 15 16 return 0; 17 } Page 32

4.2 문자처리함수 01 #include <stdio.h> 02 03 int main(void) 04 { 05 char *pc = "c language"; 06 07 while (*pc) 08 { 09 printf("%c", *pc-32); 10 pc++; 11 } 12 13 printf("\n"); 14 return 0; 15 } Page 33

4.2 문자처리함수 문자처리함수 시스템에서문자를처리하는함수들을헤더파일인 ctype.h 파일에만들어놓음. Page 34

4.2 문자처리함수 01 #include <stdio.h> 02 #include <ctype.h> 03 04 int main(void) 05 { 06 char *pc = "c language"; 07 08 while(*pc) 09 { 10 printf("%c", toupper(*pc+ +)); 11 } 12 13 printf("\n"); 14 return 0; 15 } Page 35

4.3 문자열처리함수 01 #include <stdio.h> 02 03 int strleng(char *ch); 04 int main(void) 05 { 06 int len; 07 char str[ ] = "c language and data structure"; 08 len = strleng(str); 09 printf(" 문자열의크기는 %d 다.\n", len); 10 return 0; 11 } 12 13 int strleng(char *ch) 14 { 15 int index; 16 for(index = 0; *(ch+index)!= '\0'; index+ +); 17 18 return index; 19 } Page 36

4.3 문자열처리함수 문자열처리함수 시스템에서문자열을처리하는함수들을헤더파일인 string.h 파일에만들어놓 음. Page 37

4.3 문자열처리함수 size_t strlen(const char*) strlen( ) 함수는문자열을입력받아 \0 을제외한문자열의크기를반환 [ 사용예 ] char* pa = "String"; int len = strlen(pa); [ 결과 ] len 에 6 이저장된다. Page 38

4.3 문자열처리함수 int strcmp(const char* s1, const char* s2) strcmp( ) 함수는문자열 2 개를입력받아두문자열을비교 두문자열이같으면 0 을반환하고, (s1<s2) 이면 -1 을, 반대이면 1 을반환 [ 사용예 ] char* pa = "ab"; char* pb = "ab"; char* pc = "ac"; int result1 = strcmp(pa, pb); int result2 = strcmp(pa, pc); int result3 = strcmp(pc, pa); [ 결과 ] result1 에 0 이저장된다. result2 에 -1 이저장된다. result3 에 1 이저장된다. Page 39

4.3 문자열처리함수 char* strcpy(char* s1, const char* s2) strcpy( ) 함수는문자열 2 개를입력받아첫번째문자열에두번째문자열복사 첫번째문자열이두번째문자열보다크기 ( 길이 ) 가크거나같아야함. [ 사용예 ] char str[40]; char* pb = "Good"; char* pc; pc = strcpy(str, pb); [ 결과 ] str 과 pc 에 "Good" 이저장된다. Page 40

4.3 문자열처리함수 char* strcat(char* s1, const char* s2) strcat( ) 함수는문자열 2 개를입력받아첫번째문자열에두번째문자열연결 첫번째문자열의크기가두문자열을합한크기보다크거나같아야함. [ 사용예 ] char str1[40] = "C programming"; char str2[20] = " is easy"; char* pc; pc = strcat(str1, str2); [ 결과 ] pc 에 "C programming is easy" 가저장된다. Page 41

4.3 문자열처리함수 01 #include <stdio.h> 02 #include <string.h> 03 04 int main(void) 05 { 06 char cmp1[40] = "C programming"; 07 char cmp2[ ] = "Java programming"; 08 char cmp3[ ] = "C programming"; 09 char str[ ] = " is easy"; 10 11 int length, i; 12 length = strlen(cmp1); 13 14 for(i = 0; i < length; i+ +) 15 printf("%c", cmp1[i]); 16 17 printf("\n"); 18 printf("cmp1과 cmp2는서로 %s\n", strcmp(cmp1, cmp2)? " 같지않다." : " 같다."); 19 printf("cmp1과 cmp3은서로 %s\n", strcmp(cmp1, cmp3)? " 같지않다." : " 같다."); 20 printf("cmp1에 cmp2를복사하면 \"%s\" 이출력된다.\n", strcpy(cmp1, cmp2)); 21 printf("cmp1에 str을연결하면 \"%s\" 가출력된다.\n", strcat(cmp1, str)); 22 return 0; 23 } Page 42

감사합니다. C 로시작하는컴퓨터프로그래밍개정 3 판