Skip to Content
독학사독학사 2단계C프로그래밍23. 독학사 C프로그래밍 기출·유형 ② (배열·문자열·포인터)

재구성 출제 고지: 이 문제집은 국가평생교육진흥원 독학학위제 2단계 C프로그래밍 출제기준(배열·문자열, 포인터 영역)의 평가 범위와 문항 유형을 분석해 새로 구성한 재구성 문항입니다. 실제 기출 문항을 그대로 옮긴 것이 아닙니다. 회차별 정확한 문항 수·시험 시간은 시행처 공고를 확인해야 하며, 여기서는 22문항을 표준 분량으로 구성했습니다.

출제 범위와 문항 배분

영역문항 수문항 번호관련 편
배열 기초와 초기화31–311
문자열과 char 배열44–711
포인터 기초: 주소·역참조·배열과의 관계58–1212
포인터와 함수: 인자 전달·스택 프레임513–1713, 10
문자열 라이브러리 함수518–2219

이 영역은 독학사 C프로그래밍에서 오답률이 가장 높은 부분입니다. 배열 이름과 포인터의 관계, 함수에 배열·포인터를 넘길 때 실제로 무엇이 전달되는지, 문자열의 끝을 표시하는 널 문자(널 종료 문자, \0)가 어디에 있는지를 눈으로 직접 추적하는 습관이 필요합니다. 각 문제마다 변수와 메모리 상태를 손으로 그려보고 정답을 확인하세요.

배열 기초와 초기화 (1–3)

문제 1

#include <stdio.h> int main(void) { int arr[6] = {2, 4, 6, 8, 10, 12}; int sum = 0; for (int i = 0; i < 6; i += 2) { sum += arr[i]; } printf("%d\n", sum); return 0; }
문제 14지선다
위 코드를 실행했을 때 출력되는 값은?

문제 2

#include <stdio.h> int main(void) { int arr[5] = {1, 2}; printf("%d %d\n", arr[2], arr[4]); return 0; }
문제 24지선다
위 코드를 실행했을 때 출력되는 값은?

문제 3

#include <stdio.h> int main(void) { char str[] = "Hi"; printf("%d\n", (int)sizeof(str)); return 0; }
문제 34지선다
위 코드를 실행했을 때 출력되는 값은?

문자열과 char 배열 (4–7)

문제 4

#include <stdio.h> #include <string.h> int main(void) { char str[10] = "Hi"; printf("%d %d\n", (int)strlen(str), (int)sizeof(str)); return 0; }
문제 44지선다
위 코드를 실행했을 때 출력되는 값은?

문제 5

#include <stdio.h> int main(void) { char str[10] = "Hello"; printf("%d\n", str[5]); return 0; }
문제 54지선다
위 코드를 실행했을 때 출력되는 값은?

문제 6

#include <stdio.h> void printSize(char arr[]) { printf("%d\n", (int)sizeof(arr)); } int main(void) { char str[10] = "Hello"; printf("%d ", (int)sizeof(str)); printSize(str); return 0; }

(64비트 환경, 포인터 크기 8바이트 기준)

문제 64지선다
64비트 환경(포인터 크기 8바이트)에서 위 코드를 실행했을 때 출력되는 값은?

문제 7

char a[10] = "Hello"; char b[10];

위 두 배열이 선언되어 있다고 할 때, 다음 네 문장 중 하나를 실행하면 컴파일 오류가 발생한다.

문제 74지선다
다음 중 컴파일 오류가 발생하는 코드로 옳은 것은?

포인터 기초: 주소·역참조·배열과의 관계 (8–12)

문제 8

#include <stdio.h> int main(void) { int x = 10; int *p = &x; *p = 20; printf("%d %d\n", x, *p); return 0; }
문제 84지선다
위 코드를 실행했을 때 출력되는 값은?

배열 이름이 포인터로 변환되는 과정과 포인터 연산의 관계는 다음 그림처럼 이해하면 편합니다. int arr[5] = {10, 20, 30, 40, 50};이고 int *p = arr;일 때, p는 arr의 첫 원소를 가리키고 p + n은 그로부터 int 크기만큼 n칸 이동한 주소를 뜻합니다.

int형 크기가 4바이트인 환경에서는 p + 1이 실제 주소로는 4바이트 뒤로 이동합니다. 포인터에 정수를 더할 때는 그 자료형의 크기만큼 주소가 이동한다는 점이 이 그림의 핵심입니다.

문제 9

#include <stdio.h> int main(void) { int arr[5] = {10, 20, 30, 40, 50}; int *p = arr; printf("%d %d\n", *(p + 3), *p + 3); return 0; }
문제 94지선다
위 코드를 실행했을 때 출력되는 값은?

문제 10

#include <stdio.h> int main(void) { int x = 5; int *p = &x; int **pp = &p; **pp = 100; printf("%d\n", x); return 0; }
문제 104지선다
위 코드를 실행했을 때 출력되는 값은?

문제 11

문제 114지선다
int arr[5]와 int *p가 이미 선언되어 있다고 할 때, 다음 중 컴파일 오류가 발생하는 코드로 옳은 것은?

문제 12

문제 124지선다
다음 중 정의되지 않은 동작(undefined behavior)을 일으킬 가능성이 가장 큰 것은?

포인터와 함수: 인자 전달·스택 프레임 (13–17)

문제 13

#include <stdio.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main(void) { int x = 1, y = 2; swap(&x, &y); printf("%d %d\n", x, y); return 0; }
문제 134지선다
위 코드를 실행했을 때 출력되는 값은?

문제 14

#include <stdio.h> void addOne(int arr[], int size) { for (int i = 0; i < size; i++) { arr[i] += 1; } } int main(void) { int nums[3] = {1, 2, 3}; addOne(nums, 3); printf("%d %d %d\n", nums[0], nums[1], nums[2]); return 0; }
문제 144지선다
위 코드를 실행했을 때 출력되는 값은?

문제 15

문제 154지선다
다음 중 포인터가 가리키는 대상의 값은 바꿀 수 있지만, 포인터 자신이 다른 주소를 가리키도록 다시 대입할 수는 없는 선언은?

문제 16

int *createDangling(void) { int local = 10; return &local; }
문제 164지선다
위 함수에 대한 설명으로 가장 적절한 것은?

문제 17

#include <stdio.h> int square(int n) { int result = n * n; return result; } int main(void) { int a = 3; int b = square(a); int c = square(b); printf("%d\n", c); return 0; }

함수가 호출될 때마다 새로 만들어지는 스택 프레임(stack frame)의 상태를 표로 추적하면 다음과 같습니다.

호출 순서호출식매개변수 n지역변수 result반환값대입된 변수
1square(a)399b = 9
2square(b)98181c = 81
문제 174지선다
위 코드를 실행했을 때 출력되는 값은?

문자열 라이브러리 함수 (18–22)

문제 18

문제 184지선다
char dest[5];가 선언되어 있다고 할 때, 다음 중 버퍼 오버플로(buffer overflow) 위험이 있는 코드로 가장 적절한 것은?

문제 19

#include <stdio.h> #include <string.h> int main(void) { char a[] = "apple"; char b[] = "applesauce"; printf("%d\n", strncmp(a, b, 5)); return 0; }
문제 194지선다
위 코드를 실행했을 때 strncmp가 반환하는 값에 대한 설명으로 가장 적절한 것은?

문제 20

#include <stdio.h> #include <string.h> int main(void) { char dest[20] = "Foo"; strcat(dest, "Bar"); printf("%s\n", dest); return 0; }
문제 204지선다
위 코드를 실행했을 때 출력되는 값은?

문제 21

문제 214지선다
strcmp 함수의 반환값에 대한 설명으로 옳지 않은 것은?

문제 22

#include <stdio.h> #include <string.h> int main(void) { char dest[10]; strncpy(dest, "HelloWorld", 5); dest[5] = '\0'; printf("%s\n", dest); return 0; }
문제 224지선다
위 코드를 실행했을 때 출력되는 값은?

참고 자료

Last updated on