C 언어 기초2
연산자
연산자(Operator)란 프로그램의 산술식이나 연산식을 표현하고 처리하기 위해 제공되는 다양한 기호를 의미한다.
산술 연산자
- "+" : 더하기
- "-" : 빼기
- "*" : 곱하기
- "/" : 나누기 연산
- "%" : 나머지 연산
대입 연산자
- "=" : 왼쪽에 오른쪽을 대입함
- "+=" : 더한 후 대입
- "-=" : 뺀 후 대입
- "*=" : 곱한 후 대입
- "/=" : 나눈 후 대입
- "%=" : 나머지 연산 후 대입
증감 연산자 (x는 변수명)
- "++x" : 1 증가 후 다음 연산 수행
- "x++" : 연산 수행 후 1 증가
- "--x" : 1 감소 후 다음 연산 수행
- "++x" : 연산 수행 후 1 감소
비교 연산자
- "==" : 같으면 1 반환
- "!=" : 다르면 1 반환
- ">" : 왼쪽이 더 크면 1 반환
- "<" : 오른쪽이 더 크면 1 반환
- ">=" : 왼쪽이 더 크거나 같으면 1 반환
- "<=" : 오른쪽이 더 크거나 같으면 1 반환
논리 연산자
- "&&" : 논리식 모두가 참이면 1 반환
- "||" : 논리식 중 하나만 참이면 1 반환
- "!" : NOT 연산 수행
비트 연산자
- "&" : 대응되는 비트가 모두 1이면 1 반환
- "|" : 대응되는 비트 중에서 하나라도 1이면 1 반환
- "^" : 대응되는 비트가 서로 다르면 1 반환
- "~" : 비트를 1이면 0으로, 0이면 1로 반전
- "<<" : 지정한 수만큼 비트를 왼쪽으로 이동
- ">>" : 지정한 수만큼 비트를 오른쪽으로 이동
삼항 연산자
- 문번 --> 조건식 ? 반환값1 : 반환값 2
- 조건식의 결과가 참이면 반환값1을 반환하고 아니면 반환값2을 반환한다.
포인터 연산자
- "&" : 주소 연산자
- "*" : 참조 연산자
제어문
제어문 (Control Flow Statement)
- C 언어는 절차적, 명령형 프로그램에 속하기 때문에 순서대로 명령을 수행한다. 하지만 때로 이런 순차적인 흐름을 제어해야하고 이럴 때 사용되는 문법이 제어문이다. 제어문에는 조건문, 반복문 등이 있다.
조건문 (Conditional Statements)
조건문은 주어진 조건식에 따라 명령을 수행하도록 한다.
- if문
int num = 0;
if (num ==0)
{
printf("True");
}
- if/else문
int num = 0;
if (num == 0)
{
printf("True");
}
else
{
printf("False");
}
- if/else if/else 문
int num = 0;
if (num ==0)
{
printf("True");
}
else if (num == 1)
{
printf("True2");
}
else
{
printf("False");
}
- switch 문
int num = 0;
switch(num)
{
case 0:
printf("0");
break;
case 1:
printf("1");
break;
case 2:
printf("2");
break;
default:
printf("default");
break;
}
반복문 (iteration statements)
반복문은 반복적인 명령을 처리하기 위한 제어문이다. 프로그래밍을 하는데 있어 반복적인 작업을 하는 경우가 굉장히 많기 때문에 빈번하게 사용되는 제어문이다.
- while 문
int count = 0;
while (count <= 5)
{
printf("%d", count);
count++;
}
- do/while 문
int i = 0;
do {
printf("must execute this statement!");
} while (i<=5)
{
printf("iteration");
i++;
}
- for 문
for (int i=0; i<10; i++)
{
printf("%d", i);
}
함수
함수란 특별한 작업을 수행하기 위한 코드의 집합으로 볼 수 있습니다. 다시 말해 특정 기능을 구현한 실행의 흐름입니다. 프로그램은 이러한 함수들이 모여서 하나의 전체적인 시스템을 구성하게 됩니다. 이러한 함수를 사용하는 가장 큰 이유는 재사용성을 높이기 위해서입니다. 여러번의 같은 작업을 반복하게 된다면 함수를 이용함으로 편리하게 작업할 수 있기 때문입니다. 또한 논리적인 흐름을 설계하고 작업하는데도 용이합니다.
C언어에서 함수를 선언하는 방법은 아래의 코드와 같습니다.
int sum (x,y)
{
return x+y;
}
- 반환 타입 : 여기서의 int입니다. 반환될 타입을 선언해줍니다.
- 함수명 : 여기서의 sum입니다. 사용하고자 하는 함수의 이름을 선언해줍니다.
- 매개변수 : 여기서의 (x,y)입니다. 함수에게 x와 y를 전달하는 것을 의미합니다.
- 함수 코드부 : 아래 { ``` }부분입니다. 실제적인 함수의 로직이 들어가게 됩니다.
변수의 유효 범위
변수는 선언 위치에 따라서 유효범위, 메모리 반환 시점, 초기화 여부, 저장되는 위치 등이 변경됩니다. 아래는 C에서의 메모리 영역 목록입니다.
- 메모리의 구조
- 코드 영역
- 데이터 영역
- 스택 영역
- 힙 영역
- 지역 변수 (local variable)
- 블록내에 선언된 변수로 선언된 장소에서만 유효한 변수이다. 이러한 지역 변수는 메모리상의 스택 영역에 저장되며, 초기화하지 않으면 쓰레기값을 가지고 있습니다.
- 전역 변수 (global variable)
- 전역 변수는 함수의 외부에서 선언된 변수로, 프로그램 전체에서 사용할 수 있으며 프로그램 종료시 까지 사용됩니다. 이러한 전역 변수는 데이터 영역에 저장되며 자동으로 초기화 됩니다.
- 정적 변수 (static variabel)
- static 키워드를 통해서 선언된 정적 변수는 전역, 지역 변수의 특징을 모두 가집니다. 다만 단 한번만 초기화 할 수 있으며, 프로그램 종료시에 사라집니다.
- 레지스터 변수 (register variable)
- 레지스터 변수는 지역변수에 register 키워드를 통해서 선언할 수 있으며 이러한 변수는 레지스터에 저장되어 빠르게 접근할 수 있습니다. 다만 레지스터는 크지 않아 제한 될 수 있습니다.
Reference
- 보다 자세한 내용을 학습하고 싶으시면 아래 링크를 참조해 주세요.
- http://www.tcpschool.com/c/intro