Post on 19-May-2015
7. 중간정리
차례
• 프로그래밍 시작 : 자료형과 연산자
• 조건문, 반복문, 네임스페이스
• 고급변수 사용
• 논리적 자료 표현 : 구조체
• 함수
2/25
프로그래밍 시작 : 자료형과 연산자
• 문제 분석을 통해 다룰 자료 식별 및 자료형 결정 • 변수 및 상수(constant)의 data type
• 자료형 • 정수형 : signed, unsigned
• char, int (short, long, long long) – CPU, OS, 컴파일러에 의존적
• 실수형 : 항상 signed • float, double, long double (위와 같이 의존적)
• Bool형
• 유도형 : struct, union, enum
• char • ASCII 문자 저장용
• 기본 128 + 확장 128 • BCD 코드로 처리 못하는 특수문자 등을 표현하기 위함
3/25
프로그래밍 시작 : 자료형과 연산자
• u, l, ul의 suffix 를 이용하여 상수의 data type을 엄밀히 구분할 수 있음
• 100L, 72ul
• 문자열도 상수이다(constant 이므로)
• 연산자
• 산술연산자, 관계연산자, 논리연산자, 비트연산자
4/25
* GNU C++ : type_traits.h 에 사용가능한 변수타입이,
numeric_traits.h에 사용가능한 변수범위가 정의되어 있다.
조건문
• 조건문 if, switch~case
5/25
if (조건식) 조건이 참이면 수행할 문장;
if (조건식) 조건이 참이면 수행할 문장; else
조건이 거짓이면 수행할 문장;
if (조건식1)
조건식1이 참이면 수행할 문장; else if (조건식2) 조건식2가 참이면 수행할 문장; else if (조건식3) 조건식3이 참이면 수행할 문장; ………
else
조건 모두 만족되지 못할 경우 수행할 문장;
switch (수식) {
case 상수1:
수식의 결과가 상수1일 때 수행할 내용;
case 상수2:
수식의 결과가 상수2일 때 수행할 내용;
case 상수3:
수식의 결과가 상수3일 때 수행할 내용;
case 상수4:
수식의 결과가 상수4일 때 수행할 내용; ……
default :
수식 결과가 주어진 case에 모두 만족되지 않을
경우 수행할 내용; }
반복문
• for, while, do~while
6/25
for (초기화 ; 조건문 ; 증감문) {
반복할 내용들; }
while (조건문) {
반복할 내용들; }
do
{
반복할 내용들;
} while (조건문);
break, continue
네임스페이스
• 네임스페이스
• 블록 이름으로 범위 내에 변수 함수 모두 선언, 정의가 가능하다.
• 범위 연산자(::)를 통해 해당 범위 내의 멤버 참조 가능
7/25
namespace A_RANGE
{
int score=100;
int TEST(const int s)
{
return s/10;
}
}
using namespace A_RANGE;
고급변수 사용 1
레퍼런스 변수
8/25
고급변수 사용 2
• 배열변수 – 연속적인 기억공간
• 메모리 동적 할당
9/25
int a=100, i;
int *pa=&a;
int arr[5]={1,2,3,4,5};
고급변수 사용 2
• 변수, 함수의 선언 규칙
• static const unsigned int * a = 100;
• Specifier • type specifier
• type qualifier : const, volatile
• storage class specifier
• Modifier : *, [], ()
• Identifier : 변수이름
• Initializer : rvalue
10/25
고급변수 사용 2
• Modifier
• Int *a • 주소화
• Int a[3]; • 집합화
• Int a(int b); • 함수화
• 무한확장 가능! • Int *(*a[4])(int *);
11/25
고급변수 사용 2
• 연산자 우선순위 규정
• 1. 단항우선 • 단항연산자 -> 이항 -> 삼항 -> 대입 -> , 연산자
• 2. 후치 우선 • 후치 -> 전치
• 3. 근치 우선 • 가까운 단항 -> 먼 단항
• *--(*b)[3](3,4);
• *(--(*b)[3])(3,4);
12/25
고급변수 사용 2
• 변수의 해석
• Int *a[4]; • 1. token 분리
• 2. 우선순위 배정
• 3. identifier 부터 해석
• a는 int 를 가리키는 주소 4개를 담을 수 있는 배열이다.
• * : 가리키는 데이터 타입 / 포인터가 가리키는 것 -> 차순위 modifier
• [] : 요소 수, 요소 타입 / 배열의 요소 -> 차순위 modifier
• () : return 타입 / 함수의 리턴 -> 차순위 modifier
13/25
고급변수 사용 2
14/25
int *
int *
int *
int *
a[0]
a[1]
a[2]
a[3]
int
int
int
int
Int *a[4];
a
고급변수 사용 2
• 연습
• int **p
• int *a[3]
• int (*p)[3]
• char *f(char)
• char (*p)(char)
• int a[3][4]
• int *(*p)(void)
• int *(*a[3])(void)
15/25
고급변수 사용 2
• 구조체의 동적 할당
16/25
고급변수 사용 2
• 동적구조체는 멤버 연산자(.)을 사용할 수 없다.
• 동적 구조체에는 이름이 없고, 그 구조체의 주소만 알기 때문!
• ps = new char [strlen(name) + 1];
• delete ?
17/25
논리적 자료의 표현 : 구조체
• 여러 항목을 하나로 묶어서 자료형으로 선언
• 멤버
• 멤버 참조 연산자 (.)
• 구조체 포인터형 변수의 멤버 참조 연산자 (->)
• typedef 와 함께 사용
18/25
struct 태그명 {
구조체 멤버;
} (변수이름);
typedef struct
{
구조체 멤버;
} 재정의이름;
Struct
{
구조체 멤버;
} 변수이름1;
typedef struct 태그명 {
구조체 멤버;
} 재정의이름;
함수
• 함수
• 약속된 기능을 수행
• 표준 함수 = 표준 라이브러리 = 라이브러리 함수
• 사용자 정의함수
• main()
• 함수 오버로딩(Overloading)
• 동일한 함수 이름이지만 매개변수가 다른 경우 함수 재정의 가능!!!
• Sizeof (int) ?
• sizeof는 연산자이며, 컴파일 타임에 값이 결정되어 상수화된다
19/25
함수
• 함수 등가포인터
• 함수 이름 대신
• (*p)
• int add(int, int);
• -> int (*p)(int, int);
• char *f(char *);
• -> char *(*p)(char *);
20/25
배열은?
• 배열 등가포인터
• 배열 이름 대신 • (*p)
• Int a[4]; • -> int *p;
• Int *a[4]; • -> int **p;
• Int a[2][3]; • -> (*p)[3];
21/25