
안녕하세요, 공부하는 감자입니다 🥔
정처기 실기에서 C언어는 보통 3문제 안팎으로, 언어 중 배점이 가장 큽니다. 그리고 그 중심에는 늘 포인터가 있어요.
저도 처음엔 *랑 &가 섞여 나오면 머리가 하얘졌는데, 결국 "지금 이 기호가 주소인지 값인지"를 매 줄 구분하는 연습으로 해결했습니다.
C언어는 암기가 아니라 추적 능력으로 점수가 갈리는 과목이에요.
포인터 — 세 가지만 분리해서 보세요
혼동의 9할은 이 세 가지를 뭉뚱그려 보는 데서 옵니다.
&x: 변수 x의 주소p: 포인터에 저장된 주소값*p: 포인터가 가리키는 곳의 값
int x = 7;
int *p = &x;
*p = 30;
printf("%d", x); // 30
*p = 30은 "p가 가리키는 곳에 30을 넣어라"는 뜻이라서, 포인터를 거쳐 바꿔도 원본 변수 x가 30으로 바뀝니다.
괄호 위치가 답을 바꿉니다
int arr[] = {5, 15, 25, 35};
int *p = arr;
printf("%d ", *(p + 2)); // 25
printf("%d ", *p + 2); // 7
printf("%d", arr[3]); // 35
*(p + 2)는 주소를 2칸 옮긴 뒤 값을 읽으니 25, *p + 2는 첫 값 5에 2를 더하니 7입니다. 출제자가 노리는 게 정확히 이 차이예요.
배열 이름 arr은 첫 원소의 주소(&arr[0])와 같고, &arr[i]는 arr + i와 같다는 것도 같이 기억해 두세요.
이중 포인터도 원리는 같습니다. int n = 3; int *p = &n; int **pp = &p;일 때 **pp는 "pp가 가리키는 포인터가 가리키는 값"이니까 3이에요.
strlen과 sizeof — 널 문자 포함 여부
char s[] = "WORLD";
printf("%d ", strlen(s)); // 5
printf("%d", sizeof(s)); // 6
strlen은 널 문자 \0를 빼고 센 길이, sizeof는 널 문자까지 포함한 배열 전체 크기입니다. 한 글자 차이로 답이 갈리는 단골 문제예요.
비트 연산은 2진수로 펼쳐서
머리로 계산하지 말고 시험지 여백에 2진수를 적으세요.
int a = 9; // 1001
int b = 5; // 0101
printf("%d ", a & b); // 0001 = 1
printf("%d ", a | b); // 1101 = 13
printf("%d ", a ^ b); // 1100 = 12
printf("%d ", a << 2); // 100100 = 36 (×4)
printf("%d", a >> 1); // 100 = 4 (÷2)
AND는 둘 다 1일 때, OR는 하나라도 1이면, XOR는 서로 다를 때 1입니다. XOR는 같은 값을 두 번 적용하면 0이 되는 성질 때문에 암호화·스왑 문제로 변형돼 나오기도 해요.
시프트는 왼쪽이 곱하기 2씩, 오른쪽이 나누기 2씩입니다.
재귀는 종료 조건부터 확인
int fn(int n) {
if (n <= 1) return 1;
return n * fn(n - 1);
}
printf("%d", fn(4)); // 24
fn(4) = 4 × fn(3) = 4 × 3 × fn(2) = 4 × 3 × 2 × fn(1) = 24. 실제 시험에선 팩토리얼처럼 친절하지 않은 재귀식이 나오니까, 종료 조건을 먼저 찾고 호출 스택을 종이에 그리면서 내려갔다 올라오는 습관을 들이세요.
구조체와 동적 할당은 출제 형태가 정해져 있어요
typedef struct {
char name[20];
int age;
} Person;
Person p = {"Lee", 31};
Person *q = &p;
printf("%s %d", q->name, p.age); // Lee 31
typedef 덕분에 struct 없이 Person p로 선언할 수 있고, 구조체 포인터로 접근할 땐 ->를 씁니다. q->name은 (*q).name과 같은 표현이에요.
동적 할당은 malloc-free 짝과 캐스팅만 보면 됩니다.
int *arr = (int*)malloc(sizeof(int) * 5);
for (int i = 0; i < 5; i++) arr[i] = i * 5;
printf("%d", arr[4]); // 20
free(arr);
malloc은 힙 메모리를 할당해 void*로 주소를 반환하므로 타입 캐스팅이 붙고, free를 안 하면 메모리 누수가 생긴다 — 여기까지가 시험 범위입니다.
마지막 점검표
시험 직전에 이 네 줄만 다시 확인하세요.
| 헷갈리는 지점 | 기준 |
|---|---|
*(p+1) vs *p+1 |
괄호 안이 먼저 |
strlen vs sizeof |
널 문자 포함 여부 |
a++ vs ++a |
후위는 쓰고 증가, 전위는 증가하고 씀 |
| 배열 이름 | 첫 원소의 주소 |
연습량을 늘리고 싶을 때 문어CBT에 무료 실기 모의고사가 있으니 포인터 유형만 골라 풀어보는 것도 괜찮아요.
SQLD·정처기·컴활·ADsP 무료 CBT 모의고사
기출 변형 문제, 자동 채점, 회차별 실력 추적까지 가입 없이 바로 풀어보세요.
sqldpass.com
귀찮아도 값의 변화를 코드 옆에 주석처럼 적으면서 푸는 게 제일 확실합니다.
눈으로만 따라가면 꼭 한 줄을 빼먹더라고요.
'자격증 > 정보처리기사 실기' 카테고리의 다른 글
| 정처기 실기 빈출 개념 한 장 요약 — 설계·DB·코드·보안 순서로 훑기 (0) | 2026.06.12 |
|---|---|
| 정처기 실기 코드 문제로 30~40점 버는 법 — 변수표 그리기가 전부입니다 (0) | 2026.06.12 |
| 정처기 실기 순회·정렬 추적 문제, 연필로 푸는 게 정답입니다 (자료구조 빈출 정리) (0) | 2026.06.12 |
| 2026 정보처리기사 실기 접수기간·시험일 총정리 (놓치면 몇 달 기다립니다) (0) | 2026.06.12 |
| [정보처리기사 실기] 2026년 1회차 기출복원 (0) | 2026.06.05 |