💻Computer Science/📕개발 언어 (Language)

[C][Ch.3] C언어 기초2

Written by Donghak Park

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