strings c include stdio h main charyHappy char

  • Slides: 44
Download presentation

strings. c 문자배열과 문자열 포인터 #include <stdio. h> main(){ chary[]="Happy"; char *strptr="Good"; int i;

strings. c 문자배열과 문자열 포인터 #include <stdio. h> main(){ chary[]="Happy"; char *strptr="Good"; int i; printf("chary = %sn", chary); printf("strptr = %sn", strptr); chary = "Day"; //Compile error : left operand must be l-value strptr = "Luck"; *chary = 'h'; *strptr = 'g'; //Runtime error printf("chary = %sn", chary); printf("strptr = %sn", strptr); } 7 포인터와배열 C Programming

len. Str. c 문자열의 길이 구하기 #include <stdio. h> int main() { char str[255];

len. Str. c 문자열의 길이 구하기 #include <stdio. h> int main() { char str[255]; char *p; printf("input string : "); scanf("%s", str); p = str; while(*p++); //null 문자가 나올 때까지 반복 p--; //null문자 제외 printf("length 3 = %dn", p - str); //포인터의 차이 값으로 길이 계산 return 0; } 9 포인터와배열 C Programming

convert. Char. c 문자열을 대문자로 변환 #include <stdio. h> int main() { char str[]

convert. Char. c 문자열을 대문자로 변환 #include <stdio. h> int main() { char str[] = "ab 45&*xyz"; char *p; printf("Before str = %sn", str); p = str; while(*p){ if (*p >= 'a' && *p <= 'z') *p = *p + ('A' - 'a' ); //소문자와 대문자의 코드차이 값을 더하여 변환 p++; } printf("After str = %sn", str); return 0; } 10 포인터와배열 C Programming

multipointer. c 이차원배열과 이중포인터 #include <stdio. h> void main() { int b[4][2]={{1, 10}, {2,

multipointer. c 이차원배열과 이중포인터 #include <stdio. h> void main() { int b[4][2]={{1, 10}, {2, 20}, {3, 30}, {4, 40}}; int i; 0012 FF 60 1 0012 FF 64 10 0012 FF 68 2 0012 FF 6 C 20 0012 FF 70 3 0012 FF 74 30 0012 FF 78 4 0012 FF 7 C 40 1 10 2 20 3 30 4 40 printf("%p %p %dn", b, **b); for (i=0; i<4; i++) printf("%p %p %dn", b+i, b[i], *b[i], b[i]+1, *(b[i]+1)); for (i=0; i<4; i++) printf("%d %d n", **(b+i), *(*(b+i)+1)); } 19 포인터와배열 C Programming

aryfunction. c 1차원 배열을 매개변수로 하는 다양한 함수처리 예 #include <stdio. h> int sumary(int

aryfunction. c 1차원 배열을 매개변수로 하는 다양한 함수처리 예 #include <stdio. h> int sumary(int ary[], int SIZE); int sumaryp(int *ary, int SIZE); int sump 2(int *ary, int SIZE); int main(void) { int i = 0, sum=0, ary. Length; int point[] = {95, 88, 76, 54, 85, 33, 65, 78, 99, 82}; ary. Length = sizeof (point) / sizeof (int); printf("배열 point[i]를 이용하여 원소 값을 출력 n"); for (i = 0; i < ary. Length; i++) { printf("%d%s", point[i], i == ary. Length - 1 ? "n" : ", "); sum += point[i]; } printf("메인에서 구한 합은 %dnn", sum); printf("함수 sumary()에서 구한 합은 %dn", sumary(point, ary. Length)); sumaryp()에서 구한 합은 %dn", sumaryp(point, ary. Length)); sump()에서 구한 합은 %dn", sump(point, ary. Length)); sump 2()에서 구한 합은 %dn", sump 2(point, ary. Length)); } 22 포인터와배열 C Programming

/* aryfunction. c 계속 */ int sumary(int ary[], int SIZE) { int sum =

/* aryfunction. c 계속 */ int sumary(int ary[], int SIZE) { int sum = 0, i = 0; for (i = 0; i < SIZE; i++) { sum += ary[i]; } return sum; } int sumaryp(int *ary, int SIZE) { int sum = 0, i = 0; for (i = 0; i < SIZE; i++) { sum += ary[i]; } return sum; } 23 int sump(int *ary, int SIZE) { int sum = 0, i = 0; for (i = 0; i < SIZE; i++) { sum += *(ary + i); } return sum; } int sump 2(int *ary, int SIZE) { int sum = 0, i = 0; for (i = 0; i < SIZE; i++) { sum += *ary++; } return sum; } 포인터와배열 C Programming

pointer. Param 2. c 2차원 배열을 매개변수로 사용한 예 #include <stdio. h> #define Rows

pointer. Param 2. c 2차원 배열을 매개변수로 사용한 예 #include <stdio. h> #define Rows 2 12 FF 70 #define Cols 3 void power_array 2 (int *x); … main(){ int n[Rows][Cols]={{1, 2, 3}, {4, 5, 6}}; 12 FF 78 n int i, j; for (i=0; i<Rows; i++) 12 FF 7 C for (j=0; j<Cols; j++) printf("%d ", n[i][j]); power_array 2(n); //2차원 배열명을 매개변수로 사용 12 FF 80 printf("n"); for (i=0; i<Rows; i++) 12 FF 84 for (j=0; j<Cols; j++) printf("%d ", n[i][j]); 12 FF 88 } // 2차원 배열을 1차원적 접근을 위한 포인터로 받아서 처리 12 FF 8 C void power_array 2 (int *x) { int i, j; for (i=0; i< Rows*Cols; i++) for (i=0; i<Rows; i++) *(x+i) *= *(x+i); for (j=0; j<Cols; j++) *(x+i*Cols+j) *= *(x+i*Cols+j); } 25 포인터와배열 x = 12 FF 78 … n[0][0]=1 n[0][1]=2 n[0][2]=3 n[1][0]=4 n[1][1]=5 n[1][2]=6 C Programming

aryfunction 2. c 2차원 배열을 매개변수로 하는 다양한 함수처리 예 #define Rows 2 #define

aryfunction 2. c 2차원 배열을 매개변수로 하는 다양한 함수처리 예 #define Rows 2 #define Cols 3 int sumary(int ary[][Cols], int SIZE); //SIZE = Rows, 2차원적인 접근처리 int sumaryp(int (*ary)[Cols], int SIZE); int sump(int *ary, int SIZE); //SIZE = Rows * Cols, 1차원적 접근처리 int main(void) { int i = 0, j=0, sum=0, ary. Length; int point[Rows][Cols] = {{95, 88, 76} {54, 85, 33}}; ary. Length = Rows * Cols; printf("배열 point[i][j]를 이용하여 원소 값을 출력 n"); for (i = 0; i < Rows; i++) { for (j = 0; j < Cols; j++) { printf("%d ", point[i][j]); sum += point[i][j]; } printf("n"); } printf("n메인에서 구한 합은 %dnn", sum); printf("함수 sumary()에서 구한 합은 %dn", sumary(point, Rows)); printf("함수 sumaryp()에서 구한 합은 %dn", sumaryp(point, Rows)); printf("함수 sump 2()에서 구한 합은 %dn", sump 2(point, Rows)); printf("함수 sump()에서 구한 합은 %dn", sump(point, ary. Length)); } 26 포인터와배열 C Programming

/* aryfunction 2. c 계속 */ int sumary(int ary[][Cols], int SIZE) { int sum

/* aryfunction 2. c 계속 */ int sumary(int ary[][Cols], int SIZE) { int sum = 0, i = 0, j=0; for (i = 0; i < SIZE; i++) { for (j = 0; j < Cols; j++) { sum += ary[i][j]; } } return sum; } int sump(int *ary, int SIZE) { int sum = 0, i = 0; for (i = 0; i < SIZE; i++) { sum += (*ary++); } return sum; } int sumaryp(int (*ary)[Cols], int SIZE) { int sum = 0, i = 0, j=0; for (i = 0; i < SIZE; i++) { for (j = 0; j < Cols; j++) { sum += ary[i][j]; } } return sum; } 27 포인터와배열 C Programming

C Programming 문자열을 매개변수로 사용 pointer. Param 3. c 문자열을 매개변수로 사용한 함수구현 #include

C Programming 문자열을 매개변수로 사용 pointer. Param 3. c 문자열을 매개변수로 사용한 함수구현 #include <stdio. h> void myputs (char *x); void mystrcpy (char *x, char *y); main() { char str 1[20] = "string test", str 2[20]; myputs(str 1); //문자배열을 실매개변수로 사용 mystrcpy(str 1, str 2); printf("nstr 1=%sn", str 1); printf("str 2=%sn", str 2); } void myputs (char *x) { // 문자열의 문자를 하나씩 출력하는 함수 while(*x) printf("%c", *x++); } void mystrcpy (const char *x, char *y) { // 문자열 복사함수 , 보호를 위한 x는 const로 상수처 리 while(*x) *y++ = *x++; *y=''; } 포인터와배열 28

strlen. c 문자열 길이를 구하는 함수 int main() { char st[255]; int len; printf("문자열을

strlen. c 문자열 길이를 구하는 함수 int main() { char st[255]; int len; printf("문자열을 입력하세요 : "); gets(st); len = str. Len(st); //배열명을 매개변수로 사용 printf("문자열 길이 = %dn", len); } int str. Len (const char *str) //포인터를 매개변수로 사용 { int count=0; while(*str++) count++; return (count); } 29 포인터와배열 C Programming

C Programming 문자열 배열을 매개변수로 사용 pointer. Param 4. c 문자열 배열을 매개변수로 사용한

C Programming 문자열 배열을 매개변수로 사용 pointer. Param 4. c 문자열 배열을 매개변수로 사용한 함수 #include <stdio. h> #define Max 3 void seeks (char **str); main() { char *st[Max] = {"Hard Disk", "Floppy Disk", "CD Rom"}; int num; seeks(st); } void seeks (char **str) //== seeks (char *str[]), 포인터 배열 또는 이중포인터 형식 { int i, num; for (i=0; i < Max; i++){ printf ("%d. %sn", i+1, str[i]); } printf(">>번호를 고르세요 (1 -3) : "); scanf("%d", &num); if (num < 1 || num > 3) printf (">>입력범위는 1~3입니다. n"); else printf (">>당신은 %s을(를) 선택하였습니다. n", str[num-1]); } 포인터와배열 30

*argv[](**argv) 구조 C: work>myview a. txt b. txt *argv[0] == *(*(argv + 0)) ==

*argv[](**argv) 구조 C: work>myview a. txt b. txt *argv[0] == *(*(argv + 0)) == **argv == *(*(0 x. FFE 0)) == “myview” *argv[1] == *(*(argv + 1)) == *(*(0 x. FFE 0 + (sizeof(int)*1))) == *(*(0 x. FFE 4)) == “a. txt” *argv[2] == *(*(argv + 2)) == *(*(0 x. FFE 0 + (sizeof(int)*2))) == *(*(0 x. FFE 8)) == “b. txt” 포인터배열 main()의 매개변수 FFE 0 argv[2] argv[1] argv[0] 3000 2000 1000 명령행 인자 FFE 8 FFE 4 FFE 0 3000 2000 b. txt a. txt 1000 argv myview largv : 명령행 인자 목록을 가진 포인터 배열을 가리키는 이중 포인터 32 포인터와배열 C Programming

main()함수의 매개변수 사용 예 //main argument Test (mainargv. c) #include <stdio. h> int main(int

main()함수의 매개변수 사용 예 //main argument Test (mainargv. c) #include <stdio. h> int main(int argc, char **argv) { int i; for (i=0; i < argc; i++) { printf("argv[%d] = %sn", i, argv[i]); } return 0; } <실행 결과> E: samplesPointer. AryDebug> mainargv 한림대학교 컴퓨터공학과 홍길동 argv[0] = E: samplesPointer. AryDebug> mainargv. exe argv[1] = 한림대학교 argv[2] = 컴퓨터공학과 argv[3] = 홍길동 33 포인터와배열 C Programming

C Programming Call by value & Call by reference callbyaddress. c #include <stdio. h>

C Programming Call by value & Call by reference callbyaddress. c #include <stdio. h> void incrementbyvalue(int number); void incrementbyreference(int *number); int main(void){ int number = 10; printf("number = %dnn", number); incrementbyvalue(number); //값 전달 printf("1을 증가하는 함수(값으로 전달)를 호출하였으나 변하지 않는다. n"); printf("number = %dnn", number); incrementbyreference(&number); //주소 전달 printf("1을 증가하는 함수(주소로 전달)를 호출하여 값이 증가한다. n"); printf("number = %dn", number); return 0; } void incrementbyvalue(int number) { //값 형식 매개변수 number++; } void incrementbyreference(int *number) { //포인터 형 매개변수 (*number)++; } 포인터와배열 34

C Programming Call By Reference 예 swap. c #include <stdio. h> void swap(int *x,

C Programming Call By Reference 예 swap. c #include <stdio. h> void swap(int *x, int *y); main() { int a, b; a=50; b=70; printf("a(&a)=%d(%p) b(&b)=%d(%p)n", a, &a, b, &b); swap(&a, &b); //주소 전달 printf("a=%d b=%dn", a, b); } void swap(int *x, int *y) //포인터 형 매개변수 { int z; printf("*x(x)=%d(%p) *y(y)=%d(%p)n", *x, x, *y, y); z=*x; *x=*y; *y=z; } <출력결과> a(&a)=50(0012 FF 7 C) b(&b)=70(0012 FF 78) *x(x)=50(0012 FF 7 C) *y(y)=70(0012 FF 78) a=70 b=50 포인터와배열 12 FF 28 y 12 FF 78 12 FF 24 x 12 FF 7 C … 12 FF 78 b 70 12 FF 7 C a 50 35

연습문제(2) (1)문자열을 추출하는 함수구현 <함수원형> � void leftstr(const char *str, char *des, int num)

연습문제(2) (1)문자열을 추출하는 함수구현 <함수원형> � void leftstr(const char *str, char *des, int num) : str의 왼쪽에서 num개 추출하여 des에 저장 � void rightstr(const char *str, char *des, int num) : str의 오른쪽에서 num개 추출하여 des에 저장 � void midstr(const char *str, char *des, int st, int num) : str의 st위치에서 num개 추출하여 des에 저장 <출력예시> >>문자열 입력 : hallym leftstr(st, st 2, 3) = hal rightstr(st, st 2, 3) = lym midstr(st, st 2, 1, 3) = all 37 포인터와배열 C Programming

funpointer 2. c 함수포인터를 매개변수로 사용한 예 #include <stdio. h> int add(int, int); int

funpointer 2. c 함수포인터를 매개변수로 사용한 예 #include <stdio. h> int add(int, int); int mul(int, int); void fun(char *, int (*fpt)(int, int)); int main() { int (*fpt)(int, int); //호출할 함수의 원형에 맞추어 함수 포인터 선언 fun("add", add); //함수명을 함수의 매개변수로 사용 fun("mul", mul); return 0; } int add(int a, int b) { return a + b; } int mul(int a, int b) { return a * b; } void fun(char * title, int (*fpt)(int, int)){ int a, b, result; a = 10; b = 20; result = fpt(a, b); //함수포인터로 함수호출 printf("%s = %dn", title, result ); } 39 포인터와배열 C Programming

funpointer 3. c 함수포인터 배열을 사용한 사칙연산 //함수 구현부분 int add(int a, int b)

funpointer 3. c 함수포인터 배열을 사용한 사칙연산 //함수 구현부분 int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { if (b != 0)return a / b; else return 0; } int main(){ int (*fpt[4])(int a, int b); //함수 포인터 배열 선언 int a, b, res, num; fpt[0] = add; //함수 포인터 대입 fpt[1] = sub; fpt[2] = mul; fpt[3] = div; while(1) { printf(">>1. add, 2. sub, 3. mul, 4. div, 0. exit: "); scanf("%d", &num); if (num == 0) break; printf(">>Input number for a, b : "); scanf("%d %d", &a, &b); res = fpt[num-1](a, b); //선택한 메뉴에 해당하는 함수포인터를 이용한 함수 호출 printf(">>result = %dn", res); } return 0; } 40 포인터와배열 C Programming