Download presentation
Presentation is loading. Please wait.
1
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열
2
포인터 선언 포인터 선언 포인터의 선언 자료형 * 변수명; 선언 예 int *ptr;
3
【예제 10-1】Ex1.c 02 포인터 기본 예제 01 #include <stdio.h>
02 int main(void) 03 { 04 int i = 10; 05 int *ptr = &i; 06 07 printf("ptr의 주소값 : %p\n", &ptr); 08 printf("i의 주소값 : %p\n", &i); 09 printf("i의 주소값 : %p\n\n", ptr); printf("i의 값 : %d\n", i); 11 printf("i의 값 : %d\n", *ptr); 12 13 return 0; 14 } 표준입력 스트림
4
【예제 10-2】Ex2.c 02 포인터 기본 예제 01 #include <stdio.h>
02 int main(void) 03 { 04 int i = 10; 05 int *ptr = &i; 06 *ptr = i+20; 07 printf("i의 값은 : %d \n", i); 08 i = i + 20; 09 printf("i의 값은 : %d \n", *ptr); 10 11 return 0; 12 } 표준입력 스트림
5
지역변수의 한계 02 지역변수의 한계
6
포인터를 사용하여 처리한 결과 03 포인터를 사용하여 처리한 결과
7
【예제 10-3】Ex3.c 02 지역 변수의 한계 01 #include <stdio.h>
02 void Swap(int a, int b); 03 int main(void) 04 { 05 int x =10, y =5; 06 printf("Swap 함수 실행 전 \n"); 07 printf("x = %d, y = %d 이다.\n", x, y); 08 09 Swap(x, y); 10 printf("Swap 함수 실행 후 \n"); 11 printf("x = %d, y = %d 이다.\n", x, y); 12 13 return 0; 14 } 15 void Swap(int a, int b) 16 { 17 int temp; 18 temp = a; 19 a = b; 20 b = temp; 21 }
8
【예제 10-4】Ex4.c 02 지역 변수의 한계 01 #include <stdio.h>
02 void Swap(int* a, int* b); 03 int main(void) 04 { 05 int x =10, y =5; 06 printf("Swap 함수 실행 전 \n"); 07 printf("x = %d, y = %d 이다.\n", x, y); 08 09 Swap(&x, &y); 10 printf("Swap 함수 실행 후 \n"); 11 printf("x = %d, y = %d 이다.\n", x, y); 12 13 return 0; 14 } 15 void Swap(int* a, int* b) 16 { 17 int temp; 18 temp = *a; 19 *a = *b; 20 *b = temp; 21 }
9
배열과 포인터 04 배열과 포인터
10
【예제 10-5】Ex5.c 02 배열과 포인터 예제 01 #include <stdio.h>
02 int main(void) 03 { int a[] = { 10, 20, 30, 40, 50 }; 05 int *p = a; 06 printf("배열명 a를 이용한 주소 표현 \n"); 07 for(i=0; i<5; i++) 08 printf("a[%d]의 주소 %p\n", i, a + i); 09 10 printf("포인터 p를 이용한 배열 주소 11 for(i=0; i<5; i++) 12 printf("a[%d]의 주소 %p\n", i, p + i); 13 printf("포인터 p를 이용한 배열 값 표현 \n"); 14 for(i=0; i<5; i++) 15 printf("a[%d] = %d\n", i, *(p + i)); 16 return 0; 17}
11
【예제 10-6】Ex6.c 02 배열과 포인터 예제 01 #include <stdio.h>
02 int main(void) 03 { 04 int a[] = { 11, 22, 33, 44, 55 }; 05 int *p = a; 06 printf("*p의 값 = %d\n", *p); 07 p++; 08 printf("*(p+1)의 값 = %d\n", *p); 09 p++; 10 printf("*(p+2)의 값 = %d\n", *p); 11 p--; printf("*(ptr+1)의 값 = %d\n", *p); 13 14 return 0; 15 } 표준입력 스트림
12
【예제 10-7】Ex7.c 02 포인터를 함수의 인자로 01 #include <stdio.h>
02 int SumArray(int* pA, int Size); 03 int main(void) 04 { 05 int a[ ] = {10, 5, 15, 25, 7}; 06 int Sum; 07 Sum = SumArray(a, 5); 08 printf("배열의 합 : %d \n", Sum); 09 return 0; 10 } 11 int SumArray(int* pA, int Size) 12 { 13 int result = 0, i; 14 for(i=0; i<Size; i++) 15 result += pA[i]; 16 // result += *(pA + i); 17 // result += *pA++; 18 return result; 19 } 표준입력 스트림
13
【예제 10-8】Ex8.c 02 포인터를 함수의 인자로 01 #include <stdio.h>
02 void CountIncrement1(int n); // 값에 의한 전달 03 void CountIncrement2(int* n); // 주소에 의한 전달 04 int main(void) 05 { 06 int a = 10; 07 printf("a의 초기값 : %d\n", a); 08 CountIncrement1(a); 09 printf("CountIncrement1 함수 실행 후 a의 값 : %d\n", a); 10 CountIncrement2(&a); 11 printf("CountIncrement2 함수 실행 후 a의 값 : %d\n", a); 12 return 0; 13 } 14 void CountIncrement1(int n) 15 { 16 n++; 17 } 18 void CountIncrement2(int* n) 19 { 20 (*n)++; 21 }
14
포인터를 이용한 문자열 표현 05 포인터를 이용한 문자열 표현 char *포인터 이름 = “ 문자열 ”;
ex ) char *p = "MOON";
15
문자열 처리함수의 종류 06 문자열 처리함수의 종류 함수 원형 기능 size_t strlen(const char*)
문자열 길이를 알아내는 함수 int strcmp(const char* s1, const char* s2) 문자열을 비교하는 함수 char* strcpy(char* s1, const char* s2) 문자열을 복사하는 함수 char* strcat(char* s1, const char* s2) 문자열을 연결하는 함수
16
【예제 10-9】Ex9.c 02 문자열 처리 01 #include <stdio.h> 02 int main(void)
03 { 04 char *pC = "C programming"; 05 printf("문자열을 변환 명세를 이용해서 출력\n"); 06 printf("%s\n", pC); 07 08 printf("문자를 반복해서 출력\n"); 09 while(*pC) 10 printf("%c", *pC++); 11 printf("\n"); 12 13 return 0; 14} 표준입력 스트림
17
【예제 10-10】Ex10.c 02 문자열 처리 01 #include <stdio.h>
02 int main(void) 03 { 04 char *pStr[ ] = {"english", "math", "korean"}; 05 char subject[][8] = {"english", "math", "korean"}; 06 int i; 07 printf("포인터 배열을 이용해서 문자열을 출력합니다.\n"); 08 for(i=0; i<3; i++) 09 printf("pStr[%d] = %s\n", i, pStr[i]); 10 printf(" 이차원 배열을 이용해서 문자열을 출력합니다.\n"); 11 for(i=0; i<3; i++) 12 printf("subject[%d] = %s\n", i, subject[i]); 13 14 return 0; 15 }
18
【예제 10-11】Ex11.c 02 문자열 처리 01 #include <stdio.h>
02 int main(void) 03 { 04 char *pC = "c language"; 05 06 while (*pC) { 07 printf("%c", *pC-32); 08 pC++; 09 } 10 printf("\n"); 11 return 0; 12 } 표준입력 스트림
19
【예제 10-12】Ex12.c 02 문자열 처리 01 #include <stdio.h>
02 #include <ctype.h> 03 int main(void) 04 { 05 char *pC = "c language"; 06 07 while (*pC) { 08 printf("%c", toupper(*pC++)); 10 } 11 printf("\n"); 12 return 0; 13 } 표준입력 스트림
20
【예제 10-13】Ex13.c 02 문자열 처리 01 #include <stdio.h>
02 int strleng(char *ch); 03 int main(void) 04 { 05 int len; 06 char str[] = "c language and data structure"; 07 len = strleng(str); 08 printf("문자열의 크기는 %d 이다.\n", len); 09 return 0; 10 } 11 int strleng(char *ch) 12 { 13 int index; 14 for (index = 0; *(ch+index) != '\0'; index++); 15 return index; 16 } 표준입력 스트림
21
【예제 10-14】Ex14.c 02 문자열 처리 01 #include <stdio.h>
02 #include <string.h> 03 int main(void) 04 { 05 char cmp1[40] = "C programming"; 06 char cmp2[ ] = "Java programming"; 07 char cmp3[ ] = "C programming"; 08 char str[ ] = " is easy"; 09 int length, i; 10 length = strlen(cmp1); 11 for(i=0 ; i < length; i++) 12 printf("%c", cmp1[i]); printf("\n"); 14 printf("cmp1과 cmp2는 서로 %s\n", strcmp(cmp1, cmp2) ? 15 "같다" : "같지 않다"); printf("cmp1과 cmp3는 서로 %s\n", strcmp(cmp1, cmp3) ? 17 "같다" : "같지 않다"); 18 printf("cmp1에 cmp2를 복사하면 \"%s\"이 출력된다\n", 19 strcpy(cmp1, cmp2)); 20 printf("cmp1에 str를 연결하면 \"%s\"이 출력된다\n", 21 strcat(cmp1, str)); 22 return 0; 23 } 표준입력 스트림
Similar presentations