C언어 자료형
C언어의 자료형은 아래와 같이 분류 시킬 수 있다.
정수형 자료형은 아래와 같이 다시 분류 시킬 수 있다.
자료형은 부호가 있는 것이 일반적이기 때문에 signed를 생략한다. 부호가 있는 자료형에서는 항상 앞에 singed가 생략되어 있다고 생각하면 된다. unsigned는 생략할 수 없다.
1Byte 자료형의 이름이 char인 이유
char형은 문자를 저장하기에 가장 적합한 타입이다. ASCII 코드는 0 ~ 255번까지 인데 ASCII 코드는 모두 1Byte에 저장할 수 있다. 즉, 1Byte => ASCII코드를 저장할 수 있다. = 컴퓨터에서 사용하는 모든 문자를 사용 가능하다.
따라서 char형은 문자를 저장할 수 있다는 자료형이라는 것을 강조하기 위해 사용되었다. 하지만 char의 자료형으로 인해 오개념이 생기는데 가끔 몇몇 사람들은 char형이 문자만 저장할 수 있다고 생각하는데 문자 외에 숫자도 저장 할 수 있다는 것을 알아두자.
_키워드 자료형의 의미
_char, __int, long과 같이 키워드 앞에 _, __가 올 수 있다.
_가 없는 키워드는 자료형이 표준 자료형이라는 뜻이다.
_가 있는 키워드는 표준에서 벗어나 호환성을 가지고 있는데 호환성의 정도가 높다는 뜻이다.
__가 있는 키워드는 표준에서 벗어나 호환성이 없어 호환이 되지 않는다는 뜻이다.
_를 쓰는 이유는 C언어로 작성된 소스를 기계어로 번역하는 컴파일러는 개발 회사마다 다르다. 그래서 컴파일러를 만드는 회사가 독창적으로 추가 했거나 원래 표준에서 약간 벗어나게 문법을 수정했다면 _를 사용해서 호환성 여부를 표시하도록 한 것이다. 단, 모든 컴파일러에서 이런 형식을 제공하는 것이 아니기 때문에 다른 컴파일러에서 컴파일시 오류가 발생할 수 있다.
자료형의 표준
OS 16bit인 컴퓨터 int = short int --> short가 나왔다는 것은 뒤에 int가 나와 있다는 것을 구별할수 있어 int 생략가능
OS 32bit인 컴퓨터 int = long int --> long이 나왔다는 것은 뒤에 int가 나와 있다는 것을 구별할수 있어 long 생략가능
OS 64bit인 컴퓨터 int = long long int
부동소수점
부동소수점은 실수를 표현할 때 소수점의 위치를 고정하지 않고 소수점의 위치를 나타내는 수를 따로 작성하는 방식이다.
예전 24bit에서는 부동 소수점을 배워야할 필요가 있는데 현재 64비트 상황에서 부동소수점을 깊게 이해하는것은 초보자에게 좋지 않다.
지금은 "부동소수점이라는것이 있다."라는 정도만 알면 된다.
고정소수점
일정한 위치에 소수점의 위치를 고정하여 숫자를 나열하는 방법이다.
3.14 -> 0000031400
321.45 -> 0003214500
실수형 자료형의 연산
cpu는 실수처리를 원래 하지 못한다. 그래서 요즘 cpu는 보조연산장치를 가지고 있다.
하지만 실수형 자료형을 쓰면 속도가 느리기 때문에 실수형 자료형을 지양하거나 실수형 자료형을 정수형 자료형으로 바꾸어 연산한 후 나중에 실수형 자료형으로 변환시켜주는것이 좋다. 실수를 적게 쓰는것도 프로그래머의 역량이니 잘 알아두자.
예를들어 1.234를 받으면 *1000을 해주고 나중에 보여줄때 1000을 나누어서 보여주면 된다.
float의 정밀도
float는 다른 실수형 자료형보다 정밀도가 떨어진다. 따라서 정밀도 있는 실수를 다뤄야 할때는 double형을 써야한다.
숫자형 실수
3.14f로쓰면 3.14를 float형으로 인식하여 뒤에 붙는 문자가 생긴다.
문자형 상수
'A' 'd' <--- ' '를 쓰면 컴파일러가 문자를 아스키코드로 바꾸어준다.
문자열형 상수
" "이라는 형식으로 사용하고 문자들로 이루어진 집합체이라고 할 수 있다.
변수
변수는 변하는 수 라는 뜻이다.
변수는 반드시 메모리를 할당한다.
int n; 4바이트 크기의 정수를 저장할 수 있는 메모리를 할당하고 이름은 n이다.
float c; 4바이트 크기의 실수를 저장할 수 있는 메모리를 할당하고 이름은 c이다.
변수의 이름
변수의 이름은 변수가 할당받은 메모리 공간을 가리키는 이름이다.
변수의 이름은 프로그래머가 생성할 수 있지만 의미있는 이름을 주어야 하고 4~8글자 사이의 이름을 사용하는것을 추천한다.
변수의 이름을 정할 때 유의사항
한글을 사용해서는 안된다.
처음을 숫자로 시작해서는 안된다.
예약어를 사용해서는 안된다.
공백을 사용해서는 안된다.
대소문자 구분을 한다.
변수 선언하기
변수를 선언하는것은 변수에 따른 저장공간이 할당하는 것이다.
변수 초기화하기
int value;라고 입력하면 4바이트 크기의 정수를 저장할수 있는 메모리를 할당하고 value라는 이름을 가진 변수가 할당된 메모리를 가르킨다. 하지만 할당된 메모리의 위치를 알 수 없다. 그래서 메모리에 쓰레기 값이 저장되어있을 확률이 크고 value를 초기화할 필요성이 생긴다.
즉, 변수를 선언하면서 초기갑을 대입하는 것을 초기화 라고 한다.
int value; value에 쓰레기 값이 들어가 있다.
int value = 0; value 변수에 상수 0을 넣어 초기화한다.
int value = 'a' value 변수에 문자로 초기화를 할 수 있다. 이때에는 value에 'a'의 ACSII코드 값인 97이 저장된다.
2진수를 16진수로 변환하는 방법
2진수 0,1
16진수 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,C, D, E, F
2진수 <---> 16진수를 아래와 같이 변환하면 된다.
C언어와 함수
함수가 필요한 이유는 프로그램에 중복이 많다는 것이다. 중복이 많이 되는것을 함수로 표현하면 편하지만 함수로 표현하지 않으면 계속 똑같은 작업을 반복해야 하기 때문에 효율성이 떨어진다.
프로그램에서도 동일한 기능이 반복되는 경우가 많다. 반복적으로 일어나는 것을 단위 기능으로 간주하고 작업으로 묶는다.
함수란?
정해진 단위 작업을 수행하도록 명령문을 하나의 그룹으로 묶은것이다.
프로그래머들이 간혹 함수를 귀찮고 습관이 들지 않아서 함수를 사용하지 않지만 함수의 사용은 C언어에서 매우 중요하다.
앞서 설명하였듯이 우리는 평소 생각하고 말할때 생략을 많이 사용하는데 생략없이 기술해보면 함수를 사용하는것에 도움이 된다.
함수의 집합체
main이라는 이름을 가진 함수는 반드시 필요하고 Entry Point이다. 단 하나만 있어야 한다.
이전에는 main함수에 200줄 이상 넘어가지 못했지만 요즘은 컴퓨터가 좋아지면서 200줄 이상 넘어가도 된다.
이것을 보고 C언어가 함수를 매우 중요시 한다는 것을 알 수 있다.
함수의 요소
1. 함수 이름 : 함수의 특징을 담도록 함수의 이름을 짓는다.
시간이 흘러감에 따라 함수의 개수가 늘어나고 지금 이 시간에도 함수가 생성되고 있다. 따라서 프로그래머가 모든 함수를 알기는 불가능하다. 즉, 자기가 필요한 함수의 이름을 추측해서 사용하는 능력이 필요하고 프로그램할때마다 나오는 함수의 이름을 잘 알아두자.
2. 매개변수 : 작업을 수행할 때 필요한 데이터가 있다면 변수 단위로 명시
함수와 함수가 소통하기 위한 인자들을 매개변수라고 생각하면 된다.
3. 작업내용 : 작업내용이 무엇인가에 대한 것으로 { } 중괄호 안에 명령문을 나열한다.
4. 반환값 : 작업한 결과 값을 반환할때 사용
함수 호출하기
함수가 다른함수를 사용하는것
C언어 프로그램은 함수가 다른 함수를 호출하면서 프로그램이 진행한다.
호출자 : 함수를 호출하는 함수
피호출자 : 호출되는 함수
함수호출 과정
함수의 매개변수
두 함수가 호출될때 중간에서 연결해주는 변수를 매개변수라고 한다.
함수 내의 선언된 변수들은 해당 함수에서만 사용가능하고 함수 내의 변수는 함수 속에서만 쓸수 있다.
매개변수가 없는경우
매개변수가 있을때 sum(int value1, int value2)라고 쓰지만 매개변수가 없을때는 sum() sum(void)라고 한다.
여기서 void는 "현재 정해져 있지 않다" 라는 뜻다.
반환값
return : 함수를 종결 시키는 예약어
함수의 반환값 : return뒤에 명시된 변수 값이나 상수 값
함수가 값을 반환한다는 의미 : 호출자의 어떤 변수에 값을 대입
함수 이름 앞에 자료형이 없는 경우 : 자료형이 생략
반환값이 없는경우도 있다.
모든 함수가 반드시 반환값을 가져야 하는것은 아니고 반환할 값이 없으면 함수 이름 앞에 void를 명시한다.
함수는 값을 여러개 넘겨주지만 되돌려 받는것은 한개이다.
함수 이름 짓는 방법
변수의 이름 짓는방법과 동일하다.
숫자로 시작하면 안된다는것을 알아두자.
main함수
프로그램 시작을 의미하는 함수이다.
프로그램을 실행시킬때 프로그램의 상태를 확인하고 싶을 때 main함수의 반환값을 참조한다. 1은 정상적인 종료를 의미한다.
대부분 0 or 1을 사용한다. -1은 비정상적인 종료를 의미한다. 또한 retunr -1로 종료되면 윈도우에 비정상적으로 종료되었다고 로그가 남는다.
함수의 원형 선언
컴파일러는 코드를 위에서 아래쪽으로 내용을 읽으며 번역하고 요즘 원패스 컴파일러라고 한다.
함수가 아래에 있으면 컴파일러가 함수를 읽을때 미리 함수를 읽지 못해서 오류를 발생시킨다.
가능하면 피 호출자가 위에 있는게 좋다. 함수의 원형이 필요한 경우는 서로가 서로가 호출하는 경우가 있다. (상호호출구조)
함수의 원형은 함수의 이름과 반환값 매개변수를 위에 명시해 주어야 한다.
대부분 함수의 원형을 사용하지 않고 대부분 함수를 위에 적어준다.
함수를 정의한다. : 함수를 구현하는 행위
함수를 선언한다. : 함수 원형을 선언
함수의 매개변수의 이름이 생략 가능하지만 같이 적어주는것이 더 좋다.
'Programming > TIPS 17기' 카테고리의 다른 글
Day-6 배열과 문자열, 포인터 (2) | 2017.07.16 |
---|---|
Day-5 지역변수와 전역변수, 배열과 문자열 (2) | 2017.07.14 |
Day-4 조건문, 반복문,시프트 연산자와 비트연산자 (1) | 2017.07.07 |
Day-3 표준출력함수, 연산자, 조건문 (0) | 2017.07.05 |
Day-1 프로그램과 C언어, 자료형 (1) | 2017.06.28 |