Menu
Coddy logo textTech

C 치트시트

마지막 업데이트

Hello World 및 프로그램 구조

모든 C 프로그램은 main에서 시작해 int를 반환합니다.

요소코드
헤더 포함#include <stdio.h>
진입점int main(void) { ... }
명령줄 인자와 함께int main(int argc, char *argv[]) { ... }
한 줄 출력printf("Hello, World!\n");
성공 반환return 0;
한 줄 주석// comment
블록 주석/* comment */

자료형

크기는 플랫폼에 따라 다르며, 아래 최솟값은 표준이 보장합니다.

타입설명
int정수, 최소 16비트 (보통 32비트)
unsigned int음수가 아닌 정수
long / long long더 넓은 정수 (최소 32 / 64비트)
float / double단정밀도 / 배정밀도 부동소수점
char단일 바이트, 문자에도 사용됨
_Bool (bool via <stdbool.h>)true 또는 false
size_t크기와 인덱스용 부호 없는 타입
void타입 없음 - 함수와 제네릭 포인터에 사용

printf 및 scanf 형식 지정자

각 인자의 타입과 맞추는 자리표시자.

지정자대응 타입
%d / %i부호 있는 int
%u부호 없는 int
%ld / %lldlong / long long
%fdouble (printf에서는 float도)
%.2f소수점 둘째 자리까지의 double
%c단일 char
%s문자열 (char *)
%p포인터 주소
%x16진수로 표현한 부호 없는 int
%zusize_t

연산자

연산자의미
+ - * / %산술 (%는 정수 나머지)
== !=같음 / 같지 않음
< > <= >=비교
&& || !논리 and / or / not
& | ^ ~ << >>비트 and, or, xor, not, 시프트
++ --증가 / 감소
+= -= *= /=복합 대입
cond ? a : b삼항 조건
sizeof(x)타입이나 변수의 크기 (바이트)

제어 흐름

문(statement)문법
if / elseif (x > 0) { ... } else { ... }
else ifelse if (x == 0) { ... }
switchswitch (n) { case 1: ...; break; default: ...; }
while 반복문while (i < n) { ... }
do-while 반복문do { ... } while (i < n);
for 반복문for (int i = 0; i < n; i++) { ... }
break / continuebreak;는 반복문을 빠져나가고, continue;는 다음 반복으로 건너뜀
goto (드물게)goto label; ... label:

함수

사용하기 전에 선언하거나, 파일 상단에 프로토타입을 추가하세요.

작업문법
함수 정의int add(int a, int b) { return a + b; }
프로토타입 (선언)int add(int a, int b);
반환값 없음void greet(void) { ... }
매개변수 없음int rand_seed(void) { ... }
포인터로 전달 (변경)void inc(int *p) { (*p)++; }
배열 전달int sum(int arr[], int n) { ... }
static (파일 지역)static int helper(void) { ... }

포인터 및 메모리

포인터는 주소를 담습니다. 힙 메모리는 수동으로 해제해야 합니다.

작업문법
포인터 선언int *p;
주소 연산자p = &x;
역참조 (읽기/쓰기)int y = *p; / *p = 10;
널 포인터int *p = NULL;
힙에 할당int *a = malloc(n * sizeof(int));
할당 + 0으로 초기화int *a = calloc(n, sizeof(int));
할당 크기 조정a = realloc(a, newSize);
힙 메모리 해제free(a);
포인터 산술*(a + i)a[i]와 같음

배열 및 문자열

C의 문자열은 \0로 끝나는 char 배열입니다.

작업문법
배열 선언int nums[5];
배열 초기화int nums[] = {1, 2, 3};
원소 접근nums[0] = 10;
배열 길이 (스택 배열)sizeof(nums) / sizeof(nums[0])
문자열 리터럴char s[] = "hello";
문자열 길이strlen(s) (\0 제외)
문자열 복사strcpy(dst, src);
문자열 비교strcmp(a, b) == 0이면 같음
문자열 연결strcat(dst, src);

구조체 및 자주 쓰는 표준 라이브러리

작업문법
구조체 정의struct Point { int x; int y; };
선언 및 접근struct Point p; p.x = 1;
포인터로 접근p->x = 1; ((*p).x와 같음)
타입 별칭typedef struct Point Point;
입력 읽기scanf("%d", &n);
문자열을 int로 변환int n = atoi("42");
절댓값 / 거듭제곱abs(x) (int), <math.h>pow(x, y)
배열 정렬qsort(arr, n, sizeof(int), cmp);

가장 자주 쓰는 C 문법, 형식 지정자, 포인터 패턴을 한 페이지에 담았습니다. 이 C 치트시트는 C를 작성하기 위한 빠른 참조 자료입니다 - 자료형, printf/scanf 지정자, 연산자, 제어 흐름, 그리고 사람들이 자주 헷갈리는 포인터와 메모리 연산을 다룹니다.

여기 나오는 모든 내용은 표준 C(C99/C11)이며 gccclang으로 컴파일됩니다. 필요한 것을 복사하거나, C 플레이그라운드에서 어떤 코드든 바로 실행해 보세요 - 컴파일러를 설치할 필요가 없습니다.

C 치트시트 자주 묻는 질문

이 C 치트시트는 무료인가요?
네. 이 C 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 타입, 형식 지정자, 포인터 연산을 찾아봐야 할 때마다 다시 방문하세요.
C에서 스택과 힙의 차이는 무엇인가요?
스택 메모리는 지역 변수를 담고 함수가 반환될 때 자동으로 해제됩니다 - 빠르지만 크기가 제한적입니다. 힙 메모리는 malloc이나 calloc으로 명시적으로 할당되고 free를 호출할 때까지 유지되며, 현재 함수보다 오래 살아야 하거나 크기를 실행 시점에만 알 수 있는 메모리가 필요할 때 사용합니다. 힙 메모리를 free하는 것을 잊으면 메모리 누수가 발생합니다.
scanf는 앰퍼샌드(&)가 필요한데 printf는 왜 필요 없나요?
scanf는 값을 변수에 다시 써넣으므로 변수의 주소가 필요합니다 - 바로 &x가 그것을 제공합니다. printf는 값을 읽기만 하므로 값 자체를 전달합니다. 예외는 문자열입니다: char 배열은 이미 포인터로 변환(decay)되므로 & 없이 scanf("%s", name)으로 전달합니다.
C를 온라인에서 연습할 수 있나요?
네. C 플레이그라운드를 열어 이 치트시트의 어떤 코드든 브라우저에서 컴파일하고 실행해 보세요 - 컴파일러를 설치할 필요가 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 C 강좌가 변수와 반복문부터 포인터와 메모리 관리까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 구성 요소(타입, printf, 제어 흐름)부터 고급 요소(포인터, 메모리, 구조체)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.
Coddy programming languages illustration

Coddy로 C 배우기

시작하기