2014 ITA 8월 강의 C Programming -5일차- 포인터, 배열, 문자열 정대진 (2014.08.08)
목차 복습 포인터 다차원 배열 문자열 함수
복습 (1) 배열 1차원 배열 문자열 Type 변수명[개수]; 인덱스는 0부터 시작 배열의 초기화 방법 마지막에 NULL 문자 for문 이용 = {1, 2, 3, 4} = {1, 2} 부족한 부분은 0으로 채워짐 문자열 마지막에 NULL 문자 문자열 scanf()에는 & 붙이지 않음
복습 (2) 포인터 변수 주소 값의 저장 &변수 => 변수의 주소값 반환 Type * 포인터변수명; *포인터변수명 = 1; 포인터 변수 선언 시 항상 NULL(0)로 초기화!!! 배열 이름 포인터처럼 사용 배열 이름에 값 대입 불가 포인터를 배열처럼 사용 가능 포인터 연산 시 Type의 byte 수만큼 증감 “string”상수는 문자열의 주소값을 반환 포인터도 변수 타입이므로 배열로 생성 가능
프로그래밍 실습 (문자열) 사용자로부터 문자열을 입력받았을 때, 이것이 회문 (Palindrome)인지 아닌지 알려주는 함수 작성 회문 : 앞으로 읽으나, 뒤로 읽으나 같은 단어 구현의 편의를 위해서 대소문자까지 같은 경우만 회문으로 인정
포인터와 함수 함수의 파라미터 전달 방법 함수의 파라미터 전달 방법의 문제점 극복 방법 값의 복사 (call by value) 원본 값의 변화 불가 배열의 전달 불가 극복 방법 포인터 값 전달 (call by reference)
포인터와 함수 배열을 함수에 전달
포인터와 함수 배열 전달을 위한 올바른 예
포인터와 함수 배열을 함수의 인자로 전달받는 선언 (다른 느낌) 파라미터 선언에서만 가능
포인터와 함수 이제서야 풀리는 scanf() 함수에서 ‘&’사용의 비밀 일반 변수 scanf() / 문자열 scanf()
프로그램 실습 며칠 전에 만들 수 없었던 swap함수를 포인터를 이용하여 작성하시오
포인터와 함수 포인터 덕분에 생겨난 const 사용의 두 분류 타입의 const 포인터의 const
포인터와 함수 포인터 const는 왜 쓸까!? 코드의 안전성을 높이기 위해서 사용 파라미터로 넘어온 포인터를 변경하지 않기 위해서 사용 const 선언의 변수를 수정 시, 컴파일 에러
다차원 배열 다차원 배열
다차원 배열 2차원 배열
다차원 배열
다차원 배열 2차원 배열 예제
다차원 배열 2차원 배열의 메모리 할당 형태
다차원 배열 2차원 배열 초기화
다차원 배열 2차원 배열 초기화 한 줄로 초기화 (좌상단 -> 우하단)
다차원 배열 2차원 배열 초기화 공백을 주고 초기화
프로그래밍 실습 3x4 짜리 2차원 배열을 1차원 배열을 이용해서 나타내시오. 초기화 : 1 2 3 4 5 6 7 8 9 10 11 12 사용자 입력 좌표 (x,y) x : 1~4 , y : 1~3 사용자로부터 좌표와 값을 입력 받고 변경 후, 화면에 변경된 매트릭스 출력 사용자 입력 예시 : 1 3 5 -> (1,3) <현재값 9>에 5를 대입하라는 뜻
다차원 배열 3차원 배열
포인터의 포인터 포인터 변수를 포인팅
포인터의 포인터 포인터 변수 swap 1
포인터의 포인터 포인터 변수 swap 2
포인터의 포인터 3중 포인터까지!!!
main()함수 파라미터 메인 함수에도 파라미터가 들어 올 수 있음 파라미터의 개수 (argc) 파라미터 문자열 (argv) int main(int argc, char *argv[]) (0번째 파라미터는 프로그램 path) main() 함수의 파라미터들을 모두 순서에 맞춰 출력해보세 요
문자, 문자열 함수 스트림 OS에 의해서 자동 생성
문자, 문자열 함수 스트림의 종류 자동 생성 이외의 스트림은 프로그래머가 직접 생성 예시 : 파일 입출력 스트림
문자, 문자열 함수 문자 입출력 함수
문자, 문자열 함수 문자 입출력 예제
문자, 문자열 함수 EOF (End Of File) 파일의 끝 Windows에서 CTRL + Z Linux에서 CTRD + D
문자, 문자열 함수 왜 getchar() 함수는 int형이 반환 타입인가??
문자, 문자열 함수 문자열 입출력 함수 문자열 출력 puts() : 출력 후 개행 fputs() : 출력만 함
문자, 문자열 함수 문자열 입력 함수 gets() : 막 받음 fgets() : 지정된 크기 만큼만 남은 건 버퍼에~
문자, 문자열 함수 입력 버퍼가 문제가 되나요!?
문자, 문자열 함수 표준 입출력 버퍼 비우는 함수 stdin stdout 입력 버퍼에 남아 있는 데이터의 소멸 fflush()는 사실 출력버퍼를 위한 함수라서 결과를 보장받지 못함 stdout 출력 버퍼에 저장된 데이터를 목적지로 최종 전송
문자, 문자열 함수 입력 버퍼 삭제
문자, 문자열 함수 문자열 길이 함수
문자, 문자열 함수 문자열 복사 함수
문자, 문자열 함수 문자열 복사 함수
문자, 문자열 함수 문자열 덧붙임 함수
문자, 문자열 함수 문자열 비교 함수 비교 크기는 ASCII 코드 값 int stricmp(const char *string1, constchar *string2); int strnicmp(const char *string1, constchar *string2, size_t count);
문자, 문자열 함수 문자 검색 함수 char *strchr(const char *string, int c); #include <stdio.h> #include <string.h> void main(void) { char str[256]; char *ptr; int count=0; printf("아무 문자나 입력하세요 "); scanf("%s",str); for (ptr=str;;) { ptr=strchr(ptr,'a'); if (ptr == NULL) { break; } count++; ptr++; } printf("문자열에 a가 %d개 있습니다.\n",count); } 문자 검색 함수 char *strchr(const char *string, int c); char *strrchr(const char *string, int c);
문자, 문자열 함수 문자열 검색 함수 char *strstr(cont char *string, const char *strSearch); char *strpbrk(const char *string, const char *CharSet);
문자, 문자열 함수 문자열 검색 함수 (문자열 토큰 나누기) <공백, 컴마> char *strtok(char *strToken, const char *strDelimit); #include <Turboc.h> #include <string.h> void main() { char str[]="I am a boy,you are a girl"; char *p; p=strtok(str," ,"); while (p!= NULL) { puts(p); p=strtok(NULL," ,"); } }
문자, 문자열 함수 문자열 변환 함수 char *strtok(char *strToken, const char *strDelimit); #include <stdio.h> #include <string.h> void main(void) { char str[]="Made In Korea"; char str2[16]; strcpy(str2,str); strupr(str2); printf("strupr => %s\n",str2); strcpy(str2,str); strlwr(str2); printf("strlwr => %s\n",str2); strrev(str2); printf("strrev => %s\n",str2); strset(str2,'*'); printf("strset => %s\n",str2); }
문자, 문자열 함수 부수적 문자열 함수 1 (ctype.h)
문자, 문자열 함수 부수적 문자열 함수 2 (stdlib.h)
프로그래밍 실습 (배운것과 관련 없음) 사용자로부터 10진수의 정수를 받고, 이를 2진수로 변환 출력하는 함수 작성
프로그래밍 숙제 버블정렬의 기본을 알려 드릴테니, 정수형 배열을 입력 받아 버블 정렬하는 함수를 구현하시오. (오름차순) 버블정렬의 기본을 알려 드릴테니, 정수형 배열을 입력 받아 버블 정렬하는 함수를 구현하시오. (오름차순) 버블(bubble) 정렬은 칠판으로 설명
프로그래밍 숙제 사용자가 입력한 문자열로부터 특정 문자열을 찾아서 바꿔 출력하는 프로그램을 작성하시오.
오늘 수업 종료 다음 수업 내용 앞으로 배울 내용들 구조체 포인터 다차원 배열 파일 입출력 메모리관리 (동적할당) 약간의 디버깅방법