깨알 C언어 1-10강 핵심 요약
https://youtu.be/Lj0EszeZo2A?list=PLdaE6YENrbZA8sXCvVBUWjFwFI2zb4tlK
- 02. 컴파일러, 인터프리터
💡컴파일 : 인간의 고급 언어를 컴퓨터가 해석할 수 있는 저급 언어로 번역.
전처리기 -> 컴파일러 -> 어셈블러 -> 링커
전처리기- 전처리 구문을 처리하는 과정
컴파일러 - 고수준의 인간 언어를 저수준 언어로 변환(기계어와 가장 가깝게)
어셈블러 - 완벽한 기계어로 바꿔주는 역할
링커 - 여러 오브젝트 파일이나 라이브러리를 합치는 역할
컴파일러 VS 인터프리터
- 번역 : 컴파일러의 경우, 고급 언어로 작성된 프로그램을 컴퓨터가 이해하는 언어로 번역. 전체를 번역하므로 시간이 오래 걸리지만, 한번 번역한 후에는 재번역하지 않아서 실행 속도가 빠름.( C, C++, JAVA)
- 통역 : 인터프리터의 경우, 한 줄씩 읽어서 실행하는 프로그램. 일종의 통역 시스템. 번역과 실행이 동시에 이루어지기 때문에 별도의 실행 파일은 존재하지 않는다. (Ruby, php, JS)
- 03. 변수
변수 : 데이터를 저장할 수 있는 메모리의 기억공간.
변수에서는 특히 '크기'가 중요하다. 데이터의 낭비를 최소화 하는 것이 중요하기 때문.
변수 생성 규칙 및 특징
- 예약어는 사용 불가, 공백 포함 불가, 첫 글자는 영문과 언더바만 사용 가능, 언더바 외의 특수문자 불가, 대소문자 구분
변수 타입
문자형 char 1byte
정수형 short 2 byte int 4 byte(예전엔 2byte) long 4 byte
실수형 float 4 byte double 8 byte
변수 선언은 Int
Int age;
Int age = 40;
- 04. 변수의 종류와 유효범위
지역 변수: 함수/블록 안에서 선언하는 변수. 함수/블록의 종료와 함께 메모리상에서 소멸. 초기값이 없으면 쓰레기값이 들어간다. 스택 영역에 저장된다.
전역 변수: 함수 블록 밖에서 선언되며, 전체 함수에 영향을 준다. 초기값이 없으면 0이 들어간다. 프로그램 종료시 메모리에서 소멸. 데이터 영역에 저장됨.
정적 변수: static으로 선언, 함수가 종료되어도 소멸되지 않고 메모리상에 값이 그대로 유지.
동적 변수: 메모리 동적 할당으로 생성되는 변수. 런타임에 메모리를 할당. 무조건 포인터를 사용하며 힙 영역에 저장.
- 05. 산술연산자
C언어에서 정수/정수는 소수점이 없다. (ex 3/4 = 0)
단항 연산자에서 헷갈리는 부분
a = 10;
b = a++; //a인 10값을 b에 먼저 넣고 a가 11이 된다.
c = ++a; //a를 먼저 12로 만든 뒤 c에 넣는다.
// a는 12, b는 10, c는 12
++가 앞에 있으면 먼저 1더하고 나서 식을 수행한다.
++가 뒤에 있으면 식을 수행하고 나서 1을 더해준다.
- 06. 연산자 우선 순위
예시)
int a = 3
int b = 4
int c = 5
int d = 6
d%b + ++a*c-- = ?
// 2+20 = 22
- 07. 관계, 논리 연산자, 조건문
if문 : 신호등처럼 특정 조건이 주어졌을 때 무엇을 할 것인가.
switch문 : 여러 개 중에 직접 선택을 하는 상황에서 그 결과값을 얻어내는 것. 일종의 자판기.
- 08. 논리 연산자, 증감 연산
- 09. 산술 연산자
y = 3+2*(x=7/2)
// 정수/정수는 정수이기 때문에 x = 3
// y = 9
int a= 10, b = 20;
num = (a++ == 11) && (b ++ ==20)
// 이미 a++ !== 11이기 때문에 and 연산자의 수행은 필요 없다. 답은 0.
- 10. 출력 형식
실수의 경우 소수점 6자리까지 출력된다. (ex 3.260000)
printf("값 : %-6.1", 3.26) : 6.1인 경우 6자리를 우선 만들어두고 소수점 1자리까지 반올림하여 잘라 표현한다. 이때 우측부터 채운다. 그러나 -가 붙은 경우, 좌측부터 수를 채우고 소수점 1자리까지 표현할 때는 반올림을 한다. 따라서 답은 3.3.