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

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

 

 


 함수 

  • 함수 정의
  • 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``에 아무런 값을 저장하지 않았는데 ``0``과 ``38``이 출력되는 것을 확인할 수 있다. (컴퓨터마다 값은 다를 수 있음) 이런 값들을 쓰레기 값이라고 한다. 이처럼 변수를 선언만 하고 초기화하지 않은 상태로 값을 불러오면 쓰레기 값을 출력하기 때문에 변수를 선언하고 값을 불러올 때 주의해야 한다.

 

 

 

 

 


연산자

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

+ Recent posts