공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 


 함수 

  • 함수 정의
  • main 함수의 return문
  • 주석

 

 변수 

  • 변수 구성
    * 변수 선언 시 주의사항
    * C언어의 표준 키워드
  • 쓰레기 값

 

 연산자 

  1. 단항 연산자
  2. 증가, 감소 연산자
  3. 이항 연산자
  4. 비트 연산자
  5. 복합 대입 연산자
  6. 관계 연산자(비교 연산자)
  7. 논리 연산자
  8. 콤마(,) 연산자
  • 연산자의 우선순위와 결합 방향

 


 

 

 컴파일(compile)  : 프로그래밍 언어를 기계어로 번역하는 과정

 

함수(function)

  특정 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합을 함수라고 한다. C언어로 만들어진 프로그램은 모두 하나이상의 함수로 구성되어 있다.

 

[반환형] [함수 이름] ([매개변수])
{
	[함수의 몸체]
}
  • 반환형(return type) : 함수를 실행하고 난 뒤 반환하는 값의 자료형을 입력
  • 함수 이름 : 함수의 이름 지정
  • 매개변수(인자, parameter) : 함수의 입력값, 자료형 변수이름 으로 구성된다.
                                                 여러 개일 경우 쉼표 , 로 구분
  • 함수의 몸체 : 함수가 호출될 경우 실행될 명령어들을 지정
                        모든 문장의 끝에는 세미콜론 ; 을 붙여준다.
  • return문(반환형이 있을 경우) : 함수를 호출한 영역으로 값을 전달하고 현재 실행 중인 함수를 종료한다.

 

 

 

main 함수의 return문

  main함수는 운영체제(Windows나 Linux 등)에 의해 프로그램이 시작되면 자동으로 호출된다. 그래서 main 함수의 return 값은 운영체제에게 전달되며 프로그램의 종료 상태를 알리는 용도로 사용된다.

 

  •  0  : 정상적인 종료의 상황에서 전달하는 값
  •  0이 아닌 값  : 비정상적인 상황으로 인해 종료될 때 전달하는 값

 

 

 

주석(comment)

  프로그램 내에 삽입된 메모이다. 컴파일의 대상에서 제외되기 때문에 프로그램의 실행 결과에 영향을 미치지 않는다.

 

주석종류 형  태 설  명
행 단위 주석 // [주석처리 된 문장] 한 줄을 주석처리할 때 사용
블록 단위 주석 /*
  [주석처리 된 문장]
*/
한 줄 이상을 주석처리할 때 사용
(중첩해서 사용할 수 없다. 내부에 주석을 또 사용해야 할 경우 행 단위 주석을 사용해야 함) 

 

 

 

 

 


변수(variable)

  값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 변수라 한다.

 

[자료형] [변수 이름] = [초기 값];
  • 자료형 : 변수의 자료형을 지정
    ex) int : 정수 저장이 가능한 메모리 공간 할당
  • 변수 이름 : 변수의 이름을 지정
  • = : 대입 연산자, = 를 기준으로 오른쪽의 값을 왼쪽 변수에 저장한다.
  • 초기값
    : 선언된 변수에 처음 값을 저장하는 것을 초기화라고 하는데 초기값을 지정해서 선언하면 '선언과 동시에 초기화'한다고 한다. 초기화 이후에 저장된 값을 변경하는 것은 대입 or 대입 연산이라고 한다. 

 

 

   변수 선언 시 주의사항 

  1. { } 내에 변수를 선언할 경우, 변수의 선언문은 중괄호의 앞부분에 위치해야 한다.
  2. 변수 이름은 알파벳, 숫자, 언더바( _ )로 구성됨
  3. C언어는 대소문자를 구별한다.
  4. 변수 이름은 숫자로 시작할 수없고, 키워드도 변수의 이름으로 사용할 수 X
  5. 이름 사이에 공백 삽입 불가

 

 

  
   C언어의 표준 키워드(Keyword) 
  : 기능적 의미가 정해져서 C언어의 문법을 구성하는 단어. 변수나 함수의 이름으로 사용할 수 없다.
   프로그래머가 다른 용도로 사용할 수 없도록 제한되어 있다.

auto    _Bool    break    case    char    _Complex    const    continue    default    do    double    else    enum    extern    float    for    goto    if    _Imaginary    return    restrict    short    signed    sizeof    static    struct    switch    typedef    union    unsigned    void    volatile    while

 

 

 

 

쓰레기 값

#include <stdio.h>

int main(void)
{
	int num1, num2; 	// 변수 num1, num2 선언 
	int num3 = 30, num4 = 40; 	// 변수 num3, num4 선언 및 초기화 
	
	printf("num1 : %d, num2 : %d \n", num1, num2);
	
	num1 = 10; 	// num1 초기화 
	num2 = 20;	// num2 초기화
	
	printf("num1 : %d, num2 : %d \n", num1, num2); 
	printf("num3 : %d, num4 : %d \n", num3, num4); 
	
	return 0;
}

 

실행 결과

  첫 번째 printf문에서 num1, num2에 아무런 값을 저장하지 않았는데 038이 출력되는 것을 확인할 수 있다. (컴퓨터마다 값은 다를 수 있음) 이런 값들을 쓰레기 값이라고 한다. 이처럼 변수를 선언만 하고 초기화하지 않은 상태로 값을 불러오면 쓰레기 값을 출력하기 때문에 변수를 선언하고 값을 불러올 때 주의해야 한다.

 

 

 

 

 


연산자

1. 단항 연산자

  + , - 가 피연산자가 하나인 단항 연산자로 사용되면 부호를 뜻하기도 한다.

 

 

 

2. 증가, 감소 연산자

  단항 연산자이며 변수에 저장된 값을 1 증가 및 감소시키는 경우에 사용되는 연산자이다.

 

종  류 연산자 연산자의 기능 결합방향
전위 (prefix) 연산자 ++num 값을 1 증가시킨 후, 속한 문장의 나머지를 진행(선 증가, 후 연산)
--num 값을 1 감소시킨 후, 속한 문장의 나머지를 진행(선 감소, 후 연산)
후위 (postfix) 연산자 num++ 속한 문장을 먼저 진행한 후, 값을 1 증가시킴(선 연산, 후 증가)
num-- 속한 문장을 먼저 진행한 후, 값을 1 감소시킴(선 연산, 후 감소)

 

#include <stdio.h>

int main(void)
{
	int num1 = 10;
	int num2 = 10;
	int num3 = (num1--) + 2;
	
	printf("num1 : %d \n", num1);
	printf("num1++ : %d \n", num1++);	// 후위 증가 
	printf("num1 : %d \n", num1);
	
	printf("\nnum2 : %d \n", num2);
	printf("++num2 : %d \n", ++num2);	// 전위 증가 
	printf("num2 : %d \n", num2);
	
	printf("\nnum3 : %d\n", num3);
}

전위 연산자와 후위 연산자의 차이를 비교해보는 예제이다.

 

실행 결과

  후위 연산자(후위 증가, 후위 감소)는 ( )의 영향을 받지 않고, 다음 문장으로 넘어가야만 값의 증가 및 감소가 이뤄지는 것을 확인할 수 있다.

 

 

 

 

3. 이항 연산자(binary operator)

  두 개의 피연산자를 요구하는 연산자를 가리켜 이항 연산자라고 한다.

 

연산자 연산자의 기능 결합방향
= 오른쪽에 있는 값을 왼쪽 변수에 대입
+ 두 피연산자의 값을 더함
- 왼쪽 피연산자 값에서 오른쪽 피연산자 값을 뺌
* 두 피연산자의 값을 곱함
/ 왼쪽 피연산자 값을 오른쪽의 피연산자 값으로 나눔
% 왼쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게되는 나머지를 반환

 

 

 

 

4. 비트 연산자

  비트단위로 연산을 하는 연산자를 의미한다. 보통 >>1 하면 값을 2로 나눈 것과 같고 <<1하면 값을 두 배한 것과 같기 때문에 상황에 따라서 곱셈과 나눗셈을 비트 이동 연산으로 대체할 수 있다.

 

연산자 연산자의 기능 결합방향
& 비트 단위로 AND 연산
ex) num1 & num2
| 비트 단위로 OR 연산
ex) num1 | num2
^ 비트 단위로 XOR 연산
ex) num1 ^ num2
~ 단항 연산자로서 피연산자의 모든 비트를 반전시킨다.
ex) ~num1
<< 피연산자의 비트 열을 왼쪽으로 이동시킴
ex) num1 << 2 : 두 칸만큼 왼쪽으로 이동
>> 피연산자의 비트 열을 오른쪽으로 이동시킴
ex) num1 >> num2 : num2칸만큼 오른쪽으로 이동

 

#include <stdio.h>

int main(void)
{
	int num1 = 15;	// 00000000 00000000 00000000 00001111
	int num2 = 20;	// 00000000 00000000 00000000 00010100
	
	printf("AND 연산의 결과 : %d\n", num1 & num2);
	printf("OR 연산의 결과 : %d\n", num1 | num2);
	printf("XOR 연산의 결과 : %d\n", num1 ^ num2);
	printf("NOT 연산의 결과(~num1) : %d\n", ~num1);
	
	printf("\nnum1 << 1 결과 : %d\n", num1 << 1);
	printf("num1 << 2 결과 : %d\n", num1 << 2);
	printf("num1 << 3 결과 : %d\n", num1 << 3);
	
	printf("\nnum1 >> 1 결과 : %d\n", num1 >> 1);
	printf("num1 >> 2 결과 : %d\n", num1 >> 2);
	printf("num1 >> 3 결과 : %d\n", num1 >> 3);
	
	return 0;	
}

비트 연산자를 확인해보는 예제이다.

 

실행 결과

 



 

5. 복합 대입 연산자

  다른 연산자와 합쳐진 형태의 대입 연산자를 복합 대입 연산자라고 한다.

 

연산자 의미 설명
+= ex) a += b
a = a + b
더한 값을 다시 자신에게 저장
-= ex) a -= b
a = a - b
뺀 값을 다시 자신에게 저장
*= ex) a *= b
a = a * b
곱한 값을 다시 자신에게 저장
/= ex) a /= b
a = a / b
나눈 값을 다시 자신에게 저장
%= ex) a %= b
a = a % b
나눈 나머지 값을 다시 자신에게 저장
<<= ex) a <<= b
a = a << b
왼쪽으로 비트이동 한 값을 다시 자신에게 저장
>>= ex) a >>= b
a = a >> b
오른쪽으로 비트이동 한 값을 다시 자신에게 저장
&= ex) a &= b
a = a & b
AND 연산한 값을 다시 자신에게 저장
^= ex) a ^= b
a = a ^ b
XOR 연산한 값을 다시 자신에게 저장
|= ex) a |= b
a = a | b
OR 연산한 값을 다시 자신에게 저장

 

 

 

 

6. 관계 연산자(비교 연산자)

  관계 연산자는 대소와 동등의 관계를 따지는 연산자이다.

  아래의 연산자들은 조건을 만족하면 1(참, true)을, 만족하지 않으면 0(거짓, false)을 반환한다.

 

연산자 연산자의 기능 결합방향
< ex) n1 < n2
n1이 n2보다 작은가?
> ex) n1 > n2
n1이 n2보다 큰가?
== ex) n1 == n2
n1이 n2와 같은가?
!= ex) n1 != n2
n1이 n2와 다른가?(같지 않은가?)
<= ex) n1 <= n2
n1이 n2보다 작거나 같은가?
>= ex) n1 >= n2
n1이 n2보다 크거나 같은가?

 

 

 

 

7. 논리 연산자

  논리 연산자란 AND(논리곱), OR(논리합), NOT(논리 부정)을 표현하는 연산자이다.

 

연산자 연산자의 기능 결합방향
&& ex) A && B
A와 B모두 '참'이면 연산결과로 '참'을 반환(논리 AND) 
|| ex) A || B
A와 B 둘 중 하나라도 '참'이면 연산결과로 '참'을 반환(논리 OR)
! ex) !A
A가 '참'이면 '거짓', A가 '거짓'이면 '참'을 반환(논리 NOT)

 

 

 

 

8. 콤마 연산자(,)

  둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행(line)에 삽입하는 경우에 사용되는 연산자이다. 다른 연산자 들과 달리, 연산의 결과가 아닌 '구분'을 목적으로 주로 사용된다.

 

 

  ■ 연산자의 우선순위와 결합방향

  • 결합방향 : 우선순위가 동일한 두 연산자가 하나의 수식에 존재하는 경우, 어떠한 순서대로 연산하느냐를 결정해 놓은 것

 

순위 연산기호 연산자 결합방향
1순위

( ) 함수호출
 
[ ] 인덱스 (배열 첨자)
-> 간접지정 (포인터로 구조체 / 공용체 멤버 접근)
. 직접지정 (구조체 / 공용체 멤버 접근)
++ (postfix)
-- (postfix)
후위증가 및 감소
(자료형){값} 복합 리터럴
2위 ++ (prefix)
-- (prefix)
전위증가 및 감소
sizeof 바이트 단위 크기 계산
~ 비트 단위 NOT
! 논리 NOT
-, + 부호 연산(양수, 음수 표현)
& 주소 연산
* 간접지정 연산 (포인터 역참조)
3위 (casting) 자료형 변환
4위 *, /, % 곱셈, 나눗셈 관련 연산
5위 +, - 덧셈, 뺄셈
6위 <<, >> 비트이동 (시프트 연산)
7위 <, >, <=, >= 대소비교
8위 ==, != 동등비교
9위 & 비트 AND
10위 ^ 비트 XOR
11위 | 비트 OR
12위 && 논리 AND
13위 || 논리 OR
14위 ? :  조건연산 (삼항 연산자)
15위 =, +=, -=, *=, /=, %=,
<<=, >>=, &=, ^=, |=
대입연산
16위 , 쉼표(콤마) 연산

 

 

 

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

'기타 > C' 카테고리의 다른 글

[C] 함수  (0) 2020.04.27
[C] 조건문, 반복문  (0) 2020.04.16
[C] printf, scanf 함수  (0) 2020.04.09
[C] 자료형 변환  (0) 2020.04.08
[C] 데이터 표현 방식, 기본 자료형과 상수  (0) 2020.04.07

+ Recent posts