170 likes | 672 Views
C 로 배우는 알고리즘 - 2 장 C 언어 -. 민 주 홍 y2kminju@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2011.06.28. 개 요. 어려운 개념들 왜 C 언어 인가 ? 포인터 (Pointer) C 언어와 C++ 의 차이점. 어려운 개념들 (1/3). 데이터 추상화 (data abstraction) struct CARD rec ;
E N D
C로 배우는 알고리즘- 2장 C 언어 - 민 주 홍 y2kminju@kunsan.ac.kr 군산대학교 정보통계학과 정보과학기술 연구실 2011.06.28
개요 어려운 개념들 왜 C언어 인가? 포인터(Pointer) C언어와 C++의 차이점 IST (Information Sciences & Technology) Laboratory
어려운 개념들(1/3) • 데이터 추상화(data abstraction) • structCARD rec; • 사용자 정의 데이터형도 기본 데이터형(int, char)과 마찬가지로 형을 정의하고 그 형의 변수를 자유로이 생성할 수 있어 이 둘간의 차별이 없을 때 이를 말함. • C++에서는 Operator overloading 가능. • CARD rec; • 코드 추상화(code abstraction) • 일련의 기능을 하는 여러 문장들이 하나의 함수명으로 대표되며, 이 함수명으로 실행이 가능함을 의미 • 블랙박스의 개념으로 많이 설명(기능, 입력, 출력)
어려운 개념들(2/3) • 절차적 언어(Procedural programming language) • 코드(명령)와 데이터의 관계에서 코드와 데이터를 분리하면서 코드가 언어의 주체가 되는 형식을 말함. • 절차적인 언어는 코드가 주체가 되는 언어이고, 코드와 데이터는 서로 혼재하는 형태로 무질서한 형태를 띠고 있음.
어려운 개념들(3/3) • 객체 지향 언어(Object Oriented Programming Language) • 객체 : 코드와 데이터의 결합체 • 클래스(객체) : 주체는 데이터가 되며 코드는 이에 종속되는 형태, 데이터(코드) 추상화를 완벽하게 지원, 코드와 데이터를 결합한 클래스로 코드와 데이터의 무연관성을 해결.
왜 C 언어인가? • C 언어의 특징 • “C 언어는 작은 언어이기 때문에 그것을 설명하는 책도 작을 수 밖에 없다.” • 작고 간결하고 명확한 언어이다. • 일관성 있는 언어이다. • 고급 언어의 특성이 흠뻑 배어 있다. • 저급 언어의 특성도 포함. • 융통성이 있다.
포인터(Pointer)(1/7) • 포인터란 도대체 무엇인가? • 포인터란 주소(address)를 가지는(저장) 변수 • 포인터의 구성(주소, 데이터 형) • 주소(변수) : 내용으로 가지는 주소. • 데이터 형 : 포인터 연산시 주소가 옮겨질 양을 결정 • 데이터 형이 빠진 포인터를 void 포인터 int *iptr; void *iptr; • 포인터 변수에는 번지만 들어 갈수 있음.
포인터(Pointer)(2/7) • 포인터 연산자. • &(address of)연산자 : 변수의 주소 구함. • *(dereference)연산자 : 가리키는 주소의 내용을 참조 • *연산자 뒤에는 반드시 포인터 변수가 와야 함. • 포인터는 보통(32bit) 4byte를 차지함. 가리키는 주소의 형에 상관 없음. • 포인터 연산 : 포인터+정수, 포인터-정수, 포인터-포인터 • 포인터를 사용 하는 이유 : 포인터를 이용하지 않으면 표현이 불가능한 구문이 있음 (남발하면 소스를 이해하기 어려운 점이 있음)
포인터(Pointer)(3/7) • 구조체를 가리키는 포인터 • 포인터의 포인터 • 포인터 변수를 가리키는 포인터를 말함. char str1[] = "This is string."; char *str2 = "This also is triong."; • str1은 주소를 저장하기 위한 공간을 갖지 않는 상수 • str2는 주소를 저장하기 위한 공간을 할당 받음 주소값은 얼마든지 변경 가능 • 이점만 제외하면 포인터와 배열은 동일 취급 해도 됨. • str2는 문자열의 선두 번지가 포인터 변수에 대입 • 문자열은 null로 끝남.
포인터(Pointer)(4/7) • 포인터의 포인터 정의법. char **strarray = { "Cat", "Dog", "Lion", "Rat" }; • 왜 사용 하는가? • 사용 처 : 90% 이상이 문자열 배열을 다룰 때 사용 한다. 참조에 의한 호출(Call by reference) 포인터의 간접 조작
포인터(Pointer)(5/7) *strarray == 10; *strarray + 1 == 11;
포인터(Pointer)(6/7) • void 포인터 • 데이터형이정해지지 않은 포인터를 의미 • void 포인터 사용시 주의할 점 • 포인터가 가리키는 곳의 내용을 읽어내는 역참조(dereference, *) 연산자를 사용하지 못한다는 것. • 강제 형변환 하면 참조 가능. • 포인터 연산을 못함. • i= *(vptr+1) // 틀렸음. void 형 포인터 • i= *((int *)vptr +1); // 맞음.
포인터(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) 과 동일
C언어와 C++의 차이점(1/3) • C++ 객체지향 언어(Object Oriented Programming) • C를 기반으로 만들어짐 • C와 구별되는 독립적언어 • C보다 우수한 언어 IST (Information Sciences & Technology) Laboratory
C언어와 C++의 차이점(2/3) • C 언어란? • ALGOL60->CPL -> BCPL -> B언어 -> C언어 이후에 C++로 발전 • 절차 지향(procedure-oriented language)언어 • 프로그램을 작성할 때 실행 순서를 지정하게 되는 프로그램 언어 IST (Information Sciences & Technology) Laboratory
C언어와 C++의 차이점(3/3) IST (Information Sciences & Technology) Laboratory C언어와 C++ 비교