1 / 17

C 로 배우는 알고리즘 - 2 장 C 언어 -

C 로 배우는 알고리즘 - 2 장 C 언어 -. 민 주 홍 y2kminju@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2011.06.28. 개 요. 어려운 개념들 왜 C 언어 인가 ? 포인터 (Pointer) C 언어와 C++ 의 차이점. 어려운 개념들 (1/3). 데이터 추상화 (data abstraction) struct CARD rec ;

keegan
Download Presentation

C 로 배우는 알고리즘 - 2 장 C 언어 -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C로 배우는 알고리즘- 2장 C 언어 - 민 주 홍 y2kminju@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2011.06.28

  2. 개요 어려운 개념들 왜 C언어 인가? 포인터(Pointer) C언어와 C++의 차이점 IST (Information Sciences & Technology) Laboratory

  3. 어려운 개념들(1/3) • 데이터 추상화(data abstraction) • structCARD rec; • 사용자 정의 데이터형도 기본 데이터형(int, char)과 마찬가지로 형을 정의하고 그 형의 변수를 자유로이 생성할 수 있어 이 둘간의 차별이 없을 때 이를 말함. • C++에서는 Operator overloading 가능. • CARD rec; • 코드 추상화(code abstraction) • 일련의 기능을 하는 여러 문장들이 하나의 함수명으로 대표되며, 이 함수명으로 실행이 가능함을 의미 • 블랙박스의 개념으로 많이 설명(기능, 입력, 출력)

  4. 어려운 개념들(2/3) • 절차적 언어(Procedural programming language) • 코드(명령)와 데이터의 관계에서 코드와 데이터를 분리하면서 코드가 언어의 주체가 되는 형식을 말함. • 절차적인 언어는 코드가 주체가 되는 언어이고, 코드와 데이터는 서로 혼재하는 형태로 무질서한 형태를 띠고 있음.

  5. 어려운 개념들(3/3) • 객체 지향 언어(Object Oriented Programming Language) • 객체 : 코드와 데이터의 결합체 • 클래스(객체) : 주체는 데이터가 되며 코드는 이에 종속되는 형태, 데이터(코드) 추상화를 완벽하게 지원, 코드와 데이터를 결합한 클래스로 코드와 데이터의 무연관성을 해결.

  6. 왜 C 언어인가? • C 언어의 특징 • “C 언어는 작은 언어이기 때문에 그것을 설명하는 책도 작을 수 밖에 없다.” • 작고 간결하고 명확한 언어이다. • 일관성 있는 언어이다. • 고급 언어의 특성이 흠뻑 배어 있다. • 저급 언어의 특성도 포함. • 융통성이 있다.

  7. 포인터(Pointer)(1/7) • 포인터란 도대체 무엇인가? • 포인터란 주소(address)를 가지는(저장) 변수 • 포인터의 구성(주소, 데이터 형) • 주소(변수) : 내용으로 가지는 주소. • 데이터 형 : 포인터 연산시 주소가 옮겨질 양을 결정 • 데이터 형이 빠진 포인터를 void 포인터 int *iptr; void *iptr; • 포인터 변수에는 번지만 들어 갈수 있음.

  8. 포인터(Pointer)(2/7) • 포인터 연산자. • &(address of)연산자 : 변수의 주소 구함. • *(dereference)연산자 : 가리키는 주소의 내용을 참조 • *연산자 뒤에는 반드시 포인터 변수가 와야 함. • 포인터는 보통(32bit) 4byte를 차지함. 가리키는 주소의 형에 상관 없음. • 포인터 연산 : 포인터+정수, 포인터-정수, 포인터-포인터 • 포인터를 사용 하는 이유 : 포인터를 이용하지 않으면 표현이 불가능한 구문이 있음 (남발하면 소스를 이해하기 어려운 점이 있음)

  9. 포인터(Pointer)(3/7) • 구조체를 가리키는 포인터 • 포인터의 포인터 • 포인터 변수를 가리키는 포인터를 말함. char str1[] = "This is string."; char *str2 = "This also is triong."; • str1은 주소를 저장하기 위한 공간을 갖지 않는 상수 • str2는 주소를 저장하기 위한 공간을 할당 받음 주소값은 얼마든지 변경 가능 • 이점만 제외하면 포인터와 배열은 동일 취급 해도 됨. • str2는 문자열의 선두 번지가 포인터 변수에 대입 • 문자열은 null로 끝남.

  10. 포인터(Pointer)(4/7) • 포인터의 포인터 정의법. char **strarray = { "Cat", "Dog", "Lion", "Rat" }; • 왜 사용 하는가? • 사용 처 : 90% 이상이 문자열 배열을 다룰 때 사용 한다. 참조에 의한 호출(Call by reference) 포인터의 간접 조작

  11. 포인터(Pointer)(5/7) *strarray == 10; *strarray + 1 == 11;

  12. 포인터(Pointer)(6/7) • void 포인터 • 데이터형이정해지지 않은 포인터를 의미 • void 포인터 사용시 주의할 점 • 포인터가 가리키는 곳의 내용을 읽어내는 역참조(dereference, *) 연산자를 사용하지 못한다는 것. • 강제 형변환 하면 참조 가능. • 포인터 연산을 못함. • i= *(vptr+1) // 틀렸음. void 형 포인터 • i= *((int *)vptr +1); // 맞음.

  13. 포인터(Pointer)(7/7) • 함수 포인터 : 코드를 가리키는 포인터 int sigma(int n){ int r; for( r=0; n > 0; n-- ) r += n; return r; } int (*fptr)(int); fptr = sigma; //함수의 시작 주소는 함수명 그 자체 sum = sigma(100); sum = fptr(100); //(*fptr)(100) 과 동일

  14. C언어와 C++의 차이점(1/3) • C++ 객체지향 언어(Object Oriented Programming) • C를 기반으로 만들어짐 • C와 구별되는 독립적언어 • C보다 우수한 언어 IST (Information Sciences & Technology) Laboratory

  15. C언어와 C++의 차이점(2/3) • C 언어란? • ALGOL60->CPL -> BCPL -> B언어 -> C언어 이후에 C++로 발전 • 절차 지향(procedure-oriented language)언어 • 프로그램을 작성할 때 실행 순서를 지정하게 되는 프로그램 언어 IST (Information Sciences & Technology) Laboratory

  16. C언어와 C++의 차이점(3/3) IST (Information Sciences & Technology) Laboratory C언어와 C++ 비교

  17. 민 주 홍y2kminju@kunsan.ac.kr 감사합니다

More Related