12-1 포인터


- 포인터란 메모리의 주소 값을 저장하기 위한 변수이다.

- 포인터의 크기는 4바이트이다. 이것은 주소가 4바이트로 표현된다는 것을 의미한다.

- 포인터를 선언할 때에는 *연산자를 사용한다.

- 주소 값을 참조할 때 : & 연산자
- 포인터값을 참조할 때 : * 연산자

- 포인터의 타입은 메모리를 참조하는 범위를 알려준다.



12-2 포인터의 잘못된 사용


int* pnt;
*pnt = 10;

위의 경우 포인터를 초기화 해주지 않았으므로 *pnt의 값은 쓰레기 값이다. 즉 메모리의 어디를 참조하는지 불분명한 상태에서 값을 대입할 수 없다. 위의 코드는 런타임 에러를 발생시킨다.


int* pnt = 10;
*pnt = 10;

위의 경우 포인터를 10이라는 값으로 초기화하고 있는데, 이 역시 불분명한 메모리 주소이다. 위 코드 또한 런타임 에러를 발생시킨다.




'학부 전공 > C' 카테고리의 다른 글

14. 포인터와 함수  (0) 2010.07.14
13. 포인터와 배열  (0) 2010.07.14
11. 1차원 배열  (0) 2010.07.14
9. 함수  (0) 2010.07.09
8. 분기문  (0) 2010.07.08

11-1 1차원 배열의 선언


자료형 배열이름[길이];

- 배열의 길이를 선언할 때에는 반드시 상수를 사용해야 한다.


int array[] = {1, 2, ,3};

이렇게 선언하면 자동으로 3칸짜리 배열이 만들어지고, 각각의 인덱스에 초기화가 된다.


int array[5] = {1, 2, 3};

이렇게 선언하면 5칸짜리 배열이 만들어지고, 해당하는 값이 없는 칸(4,5번째)은 0으로 초기화된다.



11-2 배열을 이용한 문자열의 표현


char str[] = "string" ;

- 한 칸에 한 문자를 저장하므로 char형으로 선언
- null문자의 삽입까지 합쳐서 문자열길이 + 1만큼의 배열이 선언됨.

- null문자(\0)는 문자열의 끝을 나타내며, 아스키 코드값은 0 이다.
(숫자 0 의 아스키 코드값은 48이다.)

- scanf로 입력 받을때, 문자열의 경우는 &를 붙이지 않는다.



'학부 전공 > C' 카테고리의 다른 글

13. 포인터와 배열  (0) 2010.07.14
12. 포인터의 이해  (0) 2010.07.14
9. 함수  (0) 2010.07.09
8. 분기문  (0) 2010.07.08
7. 반복문  (0) 2010.07.08

9-1 함수의 정의 및 선언

- Divide and Conquer!

- 전달인자나 반환값이 없어도 된다.

- 호출되기 전에 선언되어야 한다.


9-2 변수의 범위(scope)

1) 지역변수

- 중괄호 내의 '지역'에 선언된 변수. 선언된 지역 내에서만 유효하다.
- 지역변수는 선언될 때 메모리 상에 올라갔다가, 선언되었던 지역이 끝나면 지워진다.
- 선언된 지역보다 상위 지역에 같은 이름의 변수가 있어도, 하위 지역의 전역변수가 사용된다.


2) 전역변수

- 함수 외부에 선언된 변수. 모든 코드에서 사용가능하다.
- 전역변수는 초기화하지 않으면 쓰레기값이 아니라 0 이 들어간다.


3) static 변수

- 지역변수의 선언에서 자료형 앞에 static이라는 키워드를 붙인 변수
- 함수가 종료되어도 메모리에 그대로 남아있다.
- 반복문에서 값을 유지시킬 수 있다.


4) register 변수

- 지역변수의 선언에서 자료형 앞에 register라는 키워드를 붙인 변수
- CPU의 레지스터에 저장이 된다. 빠르게 처리된다.
- 레지스터에 적재할 공간이 없으면 무시된다.


9-3 재귀적 함수 호출

- 함수 내에서 자기 자신을 다시 호출하는 형태.
- 종료조건을 설정하지 않으면, 완료되지 않은 함수가 계속 쌓이게 되어 메모리 부족으로 프로그램이 비정상 종료된다.



'학부 전공 > C' 카테고리의 다른 글

12. 포인터의 이해  (0) 2010.07.14
11. 1차원 배열  (0) 2010.07.14
8. 분기문  (0) 2010.07.08
7. 반복문  (0) 2010.07.08
6. printf함수와 scanf함수  (0) 2010.07.08

8-1 if - else

if( 조건 )
{
//내용
}


if( 조건 )
{
//내용
}
else if( 조건 )
{
//내용
}
else if( 조건 )
{
//내용
}
else 
{
//내용
}

- if-else를 사용하면 불필요한 비교 연산을 줄일 수 있다.

 * 조건 연산자 ( 삼항 연산자 )
 조건 ? A : B
조건이 true면 A, false면 B
- 조건 연산자는 실행할 문장이 많지 않을때, 코드를 간결하게 한다.


8-2 continue와 break

- break문을 만나면, 가장 가까이서 감싸고 있는 반복문 하나를 빠져 나오게 된다.

- continue문을 만나면, 가장 가까이서 감싸고 있는 반복문의 처음으로 돌아간다. for문일 경우, 증감문을 실행시키고 조건문을 비교한다.


8-3 switch-case

switch(n)
{
case 1: 내용. break;
case 2: 내용. break;
case 3: 내용. break;
default: 내용. 
}

- switch문에 전달되는 인자 n은 int형이나 char형 변수여야 한다.
- break를 쓰지 않으면 해당 case의 아래부분을 전부 실행해버린다.

- 분기의 개수가 많아지면 switch-case로 만드는게 간결해보인다.


'학부 전공 > C' 카테고리의 다른 글

11. 1차원 배열  (0) 2010.07.14
9. 함수  (0) 2010.07.09
7. 반복문  (0) 2010.07.08
6. printf함수와 scanf함수  (0) 2010.07.08
5. 상수와 기본 자료형  (0) 2010.07.08


7-1 while

- while문은 조건이 만족될 때까지 계속 반복을 시키는 것이다.
- 반복해야할 문장이 하나이면 중괄호를 쓰지 않아도 된다.

while(1)
{
// 무한 루프
}


7-2 do-while

- while문은 조건 검사를 앞에서 하지만 do-while문은 뒤에서 한다.

do
{
// 무한 루프
} while(1)


7-3 for

- for문은 초기문, 조건문, 증감문 3가지를 포함하고 있다.

for( 초기문; 조건문; 증감문 )
{
//반복 내용
}

- 증감문이 실행된 다음 조건문의 조건에 맞으면 반복, 틀리면 탈출.
- 세 문장이 꼭 같은 변수를 써야만 하는것은 아니지만, 다른 변수로 만들게 되면 가독성이 떨어진다.


'학부 전공 > C' 카테고리의 다른 글

9. 함수  (0) 2010.07.09
8. 분기문  (0) 2010.07.08
6. printf함수와 scanf함수  (0) 2010.07.08
5. 상수와 기본 자료형  (0) 2010.07.08
4. 데이터의 표현방식  (0) 2010.07.07

6-1 printf 함수

1. printf는 문자열을 출력하는 함수이다.

2. printf는 특수 문자 출력이 가능하다.

*특수 문자 목록
\a : 경고음
\b : 백스페이스
\f : 폼 피드(페이지 넘김)
\n : 개행 ( enter )
\r : 캐리지 리턴( 커서를 맨 앞으로 옮김 )
\t : 수평 탭
\v : 수직 탭
\\ : 원 표시 ( 또는 백슬래시 )
\' : 작은 따옴표
\" : 큰 따옴표

3. printf의 f는 formatted를 의미.

 *서식 문자 목록
%c : 단일 문자
%d, %i : 부호 있는 10진 정수
%f : 부호 있는 10진 실수
%s : 문자열
%o : 부호 없는 8진 정수
%u : 부호 없는 10진 정수
%x : 부호 없는 16진 정수, 10이상을 표시하는데 소문자 사용
%X : 부호 없는 16진 정수, 10이상을 표시하는데 대문자 사용
%e : e 표기법에 의한 실수
%E : E 표기법에 의한 실수
%g : 값에 따라 %f, %e 중 선택
%G : 값에 따라 %f, %E 중 선택
%% : % 기호 출력


4. 필드 폭을 지정할 수 있다.
-서식 문자에서 %기호 뒤에 숫자를 넣음으로써 공간을 확보할 수 있다.
%8d : 8칸 띄운 뒤 오른쪽 정렬 후 출력
%-8d : 8칸 띄운 뒤 왼쪽 정렬 후 출력
%+8d : 8칸 띄운 뒤 오른족 정렬 후 양수는 +, 음수는 -를 붙여서 출력



6-2 scanf 함수

- 서식 문자를 사용해서 해당되는 데이터 타입으로 입력받는다.

- 실수를 입력받을 때, double형은 %le를 사용한다.



'학부 전공 > C' 카테고리의 다른 글

8. 분기문  (0) 2010.07.08
7. 반복문  (0) 2010.07.08
5. 상수와 기본 자료형  (0) 2010.07.08
4. 데이터의 표현방식  (0) 2010.07.07
3. 변수와 연산자  (0) 2010.07.06

5-1 C언어가 제공하는 기본 자료형


- C언어는 변수의 선언을 위해 자료형을 제공한다.

 * 기본 자료형과 데이터 표현 범위

자료형 할당되는 메모리 크기 표현 가능한 데이터의 범위
정수형 char 1바이트 -128 ~ 127
short 2바이트 -32768 ~ 32767
int 4바이트 -2147483648 ~ 2147483647
long 4바이트 -2147483648 ~ 2147483647
실수형 float 4바이트 3.4*10^-37 ~ 3.4*10^38
double 8바이트 1.7*10^-307 ~ 1.7*10^308
long double 8바이트 혹은 그 이상 유동적임


- sizeof는 함수가 아니라 연산자이다. 


- 컴퓨터는 내부적으로 int형 데이터를 가장 빠르게 연산(처리)한다. 따라서 메모리가 낭비되더라도 연산을 하는 정수에는 int형을 쓰는게 좋다.
- char형은 문자를 표현하는데 좋다. 문자로 연산을 하는 일은 드물기 때문이다.

- unsigned가 붙으면 부호 비트를 사용하지 않는다. 따라서 각 데이터 표현 범위가 -x ~ x-1 에서 0 ~ 2x-1이 되는 것이다. 


5-2 상수

- 리터럴(literal)상수 : 이름이 없는 상수. 코드상에서 이름없이 문자,숫자 그대로 쓰인다.

- 심볼릭 상수 : 이름을 지니는 상수. const 키워드를 사용하거나, 매크로를 사용할 수 있다.
ex) const int MAX = 100;
 const 키워드를 사용할 때에는 선언과 동시에 초기화를 해야만 한다. (상수이기 때문에 나중에 변경할 수 없다.)

- 상수의 이름은 일반적으로 대문자로 표시한다.


5-3 자료형 변환


1) 자동 형 변환

-대입 연산시 발생.
 실수형 데이터를 정수형 데이터 타입에 대입하면 소수부의 손실이 발생한다.
 값의 표현 범위가 적은 데이터 타입에 대입하면 비트의 앞부분이 그 차이만큼 버려진다. 즉, 값이 달라진다.

-정수의 승격 ( int형 연산이 빠른 이유 )
 char형과 short형 데이터들의 연산은 각 데이터를 int형으로 변환시킨후에 연산을 진행한 후 다시 해당 데이터 타입으로 변환시킨다. int형 연산은 이 형 변환을 거치지 않기 때문에 연산이 빠른 것이다.

-산술 연산 과정에서 발생
 데이터 타입이 다른 두 수를 연산 할 때, 데이터의 손실이 최소화되는 방향으로 형 변환이 일어난다.

산술 연산 과정에서의 형 변환 방향은
char -> int -> long -> float -> double -> long double 이다.


2) 강제 형 변환 ( 명시적 형 변환 )

-변수 앞에 괄호를 붙여서 강제적으로 데이터 타입을 변환시킬 수 있다.
ex) b = (float)a/2 ;
 

'학부 전공 > C' 카테고리의 다른 글

7. 반복문  (0) 2010.07.08
6. printf함수와 scanf함수  (0) 2010.07.08
4. 데이터의 표현방식  (0) 2010.07.07
3. 변수와 연산자  (0) 2010.07.06
2. 프로그램의 기본 구성  (0) 2010.07.06

4-1 컴퓨터의 데이터 표현방식

- 컴퓨터는 모든 데이터의 표현 및 연산을 2진수로 처리한다.

- 비트 : 컴퓨터가 나타내는 데이터의 최소 단위. 2진수 값 하나를 저장할 수 있는 메모리 공간.
- 바이트 : 비트가 8개 모여서 이루어진 데이터 단위.

- 숫자 앞에 0x를 붙이면 16진수, 0을 붙이면 8진수로 표현했다는 의미이다.


4-2 정수와 실수의 표현 방식

1) 정수의 표현 방식

- 가장 왼쪽에 있는 비트는 부호 비트이다. 양수면 0, 음수면 1
- 음수를 표현할 때에는 2의 보수로 표현한다.
- 2의 보수는 모든 비트를 반전시킨 뒤, 1을 더함으로써 구할 수 있다.


2) 실수의 표현 방식

- 컴퓨터는 넓은 범위의 실수를 표현할 수 있다는 장점을 지니는 대신, 오차가 존재한다.
- 근사치를 계산해서 실수를 표현하기 때문에 오차가 있는 것이고, 이것을 부동소수점 오차라고 한다.


3) 비트 단위 연산

 - &(AND) 연산자의 진리표 - 두 개의 비트가 모두 1일때 1을 반환.
0
&
0
=>
0
0
1
0
1
0
0
1
1
1

- |(OR) 연산자의 진리표 - 두 개의 비트중 하나라도 1이면 1을 반환.

0
&
0
=>
0
0
1
1
1
0
1
1
1
1

- ^(XOR) 연산자의 진리표 - 두 개의 비트가 서로 다를 경우에 1을 반환.

0
&
0
=>
0
0
1
1
1
0
1
1
1
0


- ~(NOT),연산자- 모든 비트를 반전시킴

~0 -> 1
~1 -> 0


- <<(왼쪽 쉬프트), >>(오른쪽 쉬프트)

a << b : a의 비트를 b만큼 왼쪽 쉬프트
a >> b : a의 비트를 b만큼 오른쪽 쉬프트



'학부 전공 > C' 카테고리의 다른 글

6. printf함수와 scanf함수  (0) 2010.07.08
5. 상수와 기본 자료형  (0) 2010.07.08
3. 변수와 연산자  (0) 2010.07.06
2. 프로그램의 기본 구성  (0) 2010.07.06
1. C언어  (0) 2010.07.02

3-1 변수

- 변수 : 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름

 *변수의 자료형(데이터 타입)
- 정수형 변수 : char, int, long
- 실수형 변수 : float, double

- 변수를 선언하고 초기화하지 않으면 의미없는 값이 들어가게 되는데, 그 값을 "쓰레기 값"이라 한다.

- 변수의 선언은 함수에서 제일 위에 나와야 한다.(C++에서는 상관 없음)

 * 변수 이름의 규칙
1. 알파벳, 숫자, 언더바로만 구성된다.
2. 대소문자를 구분한다.
3. 숫자로 시작할 수 없다.

그리고 키워드와 동일한 이름을 쓰는 것도 불가능하다.



3-2 연산자


1) 대입 연산자( = ), 산술 연산자 ( +, -, *, /, %)

2) 기타 대입 연산자 ( +=, -=, *=, /=, %=)

3) 단항 연산자 ( +, - )

4) 증가, 감소 연산자 ( ++, -- )

5) 비교 연산자 ( >, <, == )

6) 논리 연산자 ( &&, ||, ! )

7) 비트 단위 연산자 ( ~, &, ^, |, <<, >> )

8) 콤마 연산자 ( , )

- 여러 개의 연산자가 있을 경우 우선순위가 높은 순서대로 실행된다.

- 컴퓨터는 0이 아닌 모든 값을 true로 인식한다. 



3-3 키보드로부터 입력받는 scanf

- scanf 함수를 쓸 때에는 인자 중에서 입력받는 변수 이름 앞에 &를 붙여야 한다.

- scanf 함수는 데이터의 경계를 공백(스페이스 바, tab키, enter키)으로 구분한다.



3-4 키워드

- int, void 등의 단어들은 이미 기능적 의미가 정해져 있다. 그러한 단어를 예약어 또는 키워드라고 한다.

- 이러한 키워드들은 변수나 함수의 이름으로 사용할 수 없다.



'학부 전공 > C' 카테고리의 다른 글

6. printf함수와 scanf함수  (0) 2010.07.08
5. 상수와 기본 자료형  (0) 2010.07.08
4. 데이터의 표현방식  (0) 2010.07.07
2. 프로그램의 기본 구성  (0) 2010.07.06
1. C언어  (0) 2010.07.02

2-1 기본적인 프로그램

1) 함수 : 적절한 입력과 그에 따른 출력이 존재하는 것.

- 입력을 전달하는 것을 인자 전달이라 하며, 함수의 실행을 요구하는 것을 함수 호출이라 한다. 둘은 동시에 일어난다.

- 함수의 특성 : 함수의 이름, 입력 형태, 출력 형태


2) 연산을 수행하는 모든 문장들은 세미콜론으로 끝난다.

3) 표준 라이브러리 함수의 사용을 위해서 헤더 파일을 include 한다.

4) return은 함수 종료와 값의 반환이라는 두 가지 의미를 지닌다.


2-2 주석

// 내용 : 한줄 주석

/*
 내용
*/ : 여러줄 주석

-컴파일러는 주석을 무시함. 즉, 주석은 프로그램에 전혀 영향을 끼치지 않음.


2-3 printf함수

- printf함수는 첫번째 인자를 출력한다.
- 첫번째 인자에 출력 대상의 형태를 지정하는 서식문자가 올 수 있다. ex) %d, %f




'학부 전공 > C' 카테고리의 다른 글

6. printf함수와 scanf함수  (0) 2010.07.08
5. 상수와 기본 자료형  (0) 2010.07.08
4. 데이터의 표현방식  (0) 2010.07.07
3. 변수와 연산자  (0) 2010.07.06
1. C언어  (0) 2010.07.02

+ Recent posts