Presentation is loading. Please wait.

Presentation is loading. Please wait.

텀프로젝트 포인터, 구조체 PSLab. 이태호.

Similar presentations


Presentation on theme: "텀프로젝트 포인터, 구조체 PSLab. 이태호."— Presentation transcript:

1 텀프로젝트 포인터, 구조체 PSLab. 이태호

2 텀프로젝트 검사 일정 및 장소 일시 : 12월 22일 장소 : 7-201호 검사 시간 : 30분(발표 15분, 질의 15분)
제출자료 소스코드 설명서 발표자료 "X조.zip"으로 압축하여 21일 23시59분까지 cicpeople에 업로드

3 텀프로젝트 비기능적 요구사항의 3번 및 4번 기본적으로는 배열을 이용하여 작성하시오 3번,4번 이용 구현시 가산점 부여     

4 텀프로젝트 소스코드 작성시 함수 및 변수 이름은 의미있는 것을 사용 주석은 반드시 달도록 한다!! 주석 없으면 감점
들여쓰기를 지킨다 내가 가르친 학생이 어디나가서 짜증나는 소스코드 작성하는 꼴은 못보겠다

5 텀프로젝트 보고서 작성 요령 페이지 제한은 없음 보고서 구성의 예...(반드시 이렇게 하라는 이야기는 아님....)
보고서 구성의 예...(반드시 이렇게 하라는 이야기는 아님....) 프로그램의 목적 조원별 분담 내역 전체적인 설계 요구사항 분석 요구사항 처리 전체 흐름도 기타

6 텀프로젝트 세부적인 설계 구조체 자료형의 정의 메뉴별 함수 설계 기능을 위하여 사용할 기술 배열 혹은 포인터
보고서 작성요령(계속) 세부적인 설계 구조체 자료형의 정의 메뉴별 함수 설계 기능을 위하여 사용할 기술 배열 혹은 포인터 정렬을 위하여 사용한 알고리즘 사용해야할 라이브러리 기타... 구현사항 함수의 이름, 역할, 매개변수, 반환값 구조체 구현 사용한 라이브러리 함수 느낀점 및 자랑거리(반드시 작성... 추가 점수 들어감)

7 텀프로젝트 발표자료 작성 요령 프로그램의 목적 팀원별 분담사항 구조체 자료형의 정의
각 메뉴별 동작 과정 및 구현사항(각각 한페이지 정도로... 정렬에 사용한 알고리즘 소개 느낀점

8 포인터 포인터 간접참조 int 포인터 상수 1024 int형 데이터 double 포인터 변수 1052 double형 데이터
포인터(pointer)란? 데이터를 저장하기 위해 할당된 메모리 공간의 주소 포인터 상수(pointer constant): 메모리 주소 값 포인터 변수(pointer variable): 주소 값을 저장할 수 있는 변수 데이터에는 자료형이 연관되어 있으므로 포인터에도 자료형이 연관됨(예: int 포인터, double 포인터 등) 간접참조(indirection, dereferencing) 포인터가 가리키는 곳을 따라가 연관된 데이터 혹은 그 데이터가 저장된 공간을 참조하는 것 간접참조한 데이터의 자료형은 포인터 자료형을 이용하여 판단함 포인터 간접참조 int 포인터 상수 1024 int형 데이터 double 포인터 변수 1052 double형 데이터

9 포인터 선언과 사용 포인터 선언 형식 포인터 사용 예 포인터와 일반 변수를 함께 선언 자료형 *포인터변수; 1 one 3 2
int one = 1; // int 변수 int *to_one; // int 포인터 변수 to_one = &one; // to_one은 one을 가리킴 one = one + 1; // one ≡ 2 one = *to_one + 1; // one ≡ 3 *to_one = one + 1; // one ≡ 4 포인터와 일반 변수를 함께 선언 int one, *to_one; int one, *to_one = &one; // 선언과 함께 초기화! 1 one 3 2 4 to_one

10 배열과 포인터 배열 이름을 포인터에 저장 포인터 가감연산 배열 이름은 배열이 할당된 공간의 주소이므로 포인터 상수임
따라서 배열 이름을 포인터 변수에 저장할 수 있음 이 때, 포인터의 타입은 배열 원소를 가리킬 수 있는 타입이어야 함 포인터 가감연산 포인터에 가감연산을 취하면 포인터가 가리키는 자료의 크기 단위로 포인터 값이 증감함 포인터 가감 연산 예: int a[10], *p = a; p += 2; 포인터 p 값은 2만큼 증가하는 것이 아니라 2 * sizeof(int)만큼 증가함

11 sizeof ?? sizeof(char)는 얼마일까? sizeof(int)는 얼마일까? sizeof(long)는 얼마일까?
p int *p; p += 1;

12 배열과 포인터 void main(){ int a[3] = {1,2,3}; int *b = a; printf(“%d, %d, %d”, a[0], a[1], a[2]); printf(“%d, %d, %d”, *b,*(b+1),*(b+2)); }

13 문자열(string) 0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다. 예
0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다.  "Hello" : 문자열 "A" : 문자열 'A' : 문자 C 언어에서 문자열은 문자 배열 형태로 저장된다. ©우균, 창병모

14 문자열 변수의 선언과 초기화 예를 들어 char s[16] ="C programming !";
char t[ ] = "C programming !";  char s[ ] = "C 프로그래밍 !"; char s[16]= {'C',' ','p','r','o','g','r','a','m','m','i','n','g',' ','!','\0'}; 문자열에 한글 넣을때… 배열의 크기는 얼마일까요?? 7개라는 사람은 그동안 잤구만… 9개라는 사람은 꾀가 있어… 10개라는 사람은 기특하다 정답은 14개 한글은 2바이트 문자!! 알파벳이나 기호는 1바이트!! ©우균, 창병모

15 포인터와 문자열 문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 예를 들어 char *포인터변수명;
char *p  = "Hello"; char m[] = "world";     p H e l l o \0 m[0] m[1] m[2] m[3] m[4] m[5] m w o r l d \0

16 포인터 대입 p = m; 실행 후 H e l l o \0 p w o r l d \0 m
즉, 포인터 p에 배열 m이 저장하는 “world\0”문자열을 저장하는 것이 아님!!

17 배열과 포인터 void main(){ char a[4] = {‘a’,’a’,’a’,’\0’}; char *b = a; printf(“%s”,a); printf(“%s”, b); *(b+1) = ‘b’; }

18 포인터를 이용한 문자열 입력 문자형 포인터 변수의 선언 예 1 (실행 시간 오류) 예 2 예 3
포인터(주소)를 저장하기 위한 기억공간만 할당 문자열이 저장될 기억장소는 확보되지 않음 예 1 (실행 시간 오류) char *name; scanf("%s", name); 예 2 char name[81]; 예 3 char name[81], *p = name; scanf("%s", p); ©우균, 창병모

19 문자열 입출력: gets()와 puts()
한 번에 한 문자열을 입력/출력할 수 있다. char *gets(char *str);  표준 입력으로부터  문자열을 읽어 들여 문자형 포인터 str이 가리키는 기억장소에 저장하고 포인터 str를 리턴한다 int puts(char *str);  str이 가리키는 문자열을 표준 출력에 출력한다. ©우균, 창병모

20 sscanf()와 sprintf() sscanf() 함수와 sprintf() 함수
scanf(), printf() 함수와 사용 방법과 역할은 비슷함. 표준 입출력 대신에 문자열에 대해 입출력 int sprintf(char *str, char *format, ...); 문자열에 출력하는 함수로 포인터 str이 가리키는 곳에 문자열 형태로 출력한다. int sscanf(char *str, char *format, ...); 문자열로부터 입력을 받는 함수로 포인터 str이 가리키는 문자열로부터 데이터를 읽어 들인다. ©우균, 창병모

21 stringio.c 실행결과: C programming language C programming language
C programming language is beautiful ©우균, 창병모

22 문자열관련 라이브러리 함수 문자열 함수 설명 strlen(str) 문자열 str의 길이를 리턴한다.
strcpy(str1, str2) 문자열 str2를 str1으로 복사한다. strcat(str1, str2) 문자열 str2를 str1에 접합한다. strcmp(str1, str2) 문자열 str1과 str2를 비교한다. strchr(str, ch) 문자열 str에서 문자 ch가 처음 나타난 위치를 리턴한다. strstr(str1, str2) 문자열 str1에서 문자 str2가 처음 나타난 위치를 리턴한다. strtok(str1, str2) 문자열 str1에서 문자열 str2 내의 문자를 토큰으로 하여 다음 토큰의 포인터를 리턴한다. atoi(str) 문자열 str을 int 정수로 변환하여 리턴한다. atol(str) 문자열 str을 long int 정수로 변환하여 리턴한다. atof(str) 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모

23 문자열 길이 함수 문자열의 길이는 문자열 내에 있는 문자의 개수이다. int strlen(char *str);
문자열의 끝에 있는 '\0'은 길이에 포함되지 않음 ©우균, 창병모

24 문자열 복사함수 strcpy(t,s) char *strcpy(char *str1, char *str2);
문자열 str2를 str1에 복사하고 포인터 str1을 리턴 str1이 가리키는 기억 장소는 문자열을 복사할 수 있을 만큼 충분히 커야 함. char *strncpy(char *str1, char *str2, int n) str2의 최대 n바이트를 str1에 복사 ©우균, 창병모

25 문자열 접합 함수 strcat() 함수 char *strcat(char *str1, char *str2);
두 문자열을 접합하여 새로운 문자열을 만드는 함수 char *strcat(char *str1, char *str2); str1의 문자열 끝('\0')에 str2의 문자열 시작을 접합한다. str1의 기억장소는 두 문자열을 연결할 수 있을 만큼 충분히 커야 한다 포인터 str1을 리턴한다. char *strncat(char *str1, char *str2, int n) 최대 n개의 문자를 접합 ©우균, 창병모

26 문자열 비교 함수 strcmp() 함수 char *strcmp(char *str1, char *str2);
두 개의 문자열을 차례로 한 문자씩 비교하는 함수 char *strcmp(char *str1, char *str2); 두 문자열을 차례로 한 문자씩 비교한다.  두 문자열이 같으면 0을 리턴 다르면 서로 다른 문자의 차이(ASCII 코드값의 차이)를 리턴 str1 문자열이 str2 문자열 보다 크면 양수를 작으면 음수 리턴 char *strncmp(char *str1, char *str2, int n) 최대 n개의 문자까지 비교 ©우균, 창병모

27 문자열 내의 특정 문자 검색 함수 strchr(), strrchr() 함수
문자열 내의 특정 문자의 위치를 검색하는 함수이다. 문자열 내의 특정 문자가 처음/마지막으로 나타난 위치(포인터) char *strchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 처음으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. char *strrchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 마지막으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. ©우균, 창병모

28 문자열 내의 특정 문자열 검색 함수 strtrstr() 함수
문자열 내의 특정 문자열의 위치를 검색하는 함수 char *strstr(char *str1, char *str2); str2이 가리키는 문자열을 str1이 가리키는 문자열에서 찾아 처음으로 발견되는 문자열의 위치 포인터를 리턴 찾는 문자열이 없으면 NULL을 리턴 ©우균, 창병모

29 문자열 변환 함수 수를 나타내는 문자열을 읽어 들이면 문자열 형태로 저장 산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환
산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환 int atoi(char *str);       문자열 str을 int 정수로 변환하여 리턴한다. long atol(char *str); 문자열 str을 long int 정수로 변환하여 리턴한다. double atof(char *str); 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모

30 토큰 추출 strtok() 함수 char *strtok(char *str1, char *str2);
하나의 큰 문자열로부터 토큰(단어)을 추출해 내는 함수 긴 문자열 내에 있는 각 단어에 대한 조작에 사용 char *strtok(char *str1, char *str2); str2 문자열에 포함되어 있는 문자들을 분리자(delimiter)로 사용 포인터 str1이 가리키는 문자열에서 토큰을 추출 처음 호출: 최초의 토큰에 대한 포인터가 리턴 다음 호출: str1 대신에 NULL을 지정하여 다음 토큰의 포인터가 리턴 이 함수가 NULL을 리턴할 때까지 이 과정을 반복 가능 ©우균, 창병모

31 실습1 문자를 복사하는 strcpy 함수를 직접 만들어보자!! 함수로 작성하실 것!!
매개변수는 포인터를 사용 복사한 문자열의 길이를 반환하도록 할 것!!

32 실습2 정수를 입력받고 정수를 2,8,10,16 진수로 표현하는 프로그램을 만드세요. gets를 사용해 입력받도록 하세요.


Download ppt "텀프로젝트 포인터, 구조체 PSLab. 이태호."

Similar presentations


Ads by Google