개요
.
어려운
개념들
.
왜
C언어
인가
?
.
포인터(Pointer)
.
C언어와
C++의
차이점
어려운
개념들
(1/3)
.
데이터
추상화
(data abstraction)
.
struct CARD 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보다
우수한
언어
C언어와
C++의
차이점
(2/3)
.
C 언어란?
.
ALGOL60->CPL -> BCPL -> B 언어
-> C언어
이후에
C++로
발전
.
절차
지향
(procedure-oriented language) 언어
.
프로그램읁
작성핝
때
실행
순서를
지정하게
되는
프로그램
언어
C언어와
C++의
차이점
(3/3)
.
C언어와
C++ 비교
C언어C++
구조체클레스(구조체, 공용체, 클래스)
를포괄하는의미절차지향언어객체지향언어문자열상수의한정이있다문자열상수의한정이없다재귀적호출불가능재귀적호출가능임시선언불가능임시선언가능암시적선언가능암시적선언불가능