2장. C 언어
정보처리기사 실기 개념서 · 1부. 프로그래밍 · 절 10개
이 장에서 배우는 것
2-1. printf 서식 지정자
다루는 항목: %d / %5d / %-5d / %05d, %f / %.2f / %7.3f, %c / %s, %o / %x / %X, %e, %%
2-2. 배열과 포인터
배열 이름 a는 &a[0]과 같은 주소다. 포인터에 정수 k를 더하면 k칸(원소 k개) 뒤를 가리킨다 — 바이트 수가 아니다.
2-3. 2차원 배열과 포인터
int a[3][4]는 "int 4개짜리 행"이 3개 이어진 것이다. 메모리는 행 순서대로 일렬이다. a[1]은 1행(int 4개 배열)이라 식에서 int *(1행 첫 원소 주소)로 바뀌므로 int *p = a[1];이면 *(p +…
2-4. 문자열과 문자열 함수
strlen은 '\0' 앞까지의 글자 수(5), sizeof는 배열 전체 크기(10)
2-5. 구조체와 구조체 포인터
구조체를 함수에 값으로 넘기면 복사본이 바뀌고, 주소로 넘기면 원본이 바뀐다.
2-6. 함수 인자 전달 — 값 vs 주소, 이중 포인터
배열을 넘기면 첫 원소의 주소가 넘어가므로 함수 안에서 바꾼 값이 원본에 남는다.
2-7. 재귀 함수
재귀는 호출을 내려가며 쌓고, 돌아오며 계산한다. 시험지에 호출 트리나 "펼친 식"을 적는다.
2-8. 기억 클래스 — static·전역·지역
같은 이름이면 가장 안쪽 블록의 변수가 보인다(지역 g가 전역 g를 가린다).
2-9. switch 와 fall-through
case는 진입 위치일 뿐이다. break를 만날 때까지 아래 case들을 계속 실행한다.
2-10. 정렬·탐색 코드 읽기
버블 정렬은 회차마다 가장 큰 값이 맨 뒤로 확정된다. 선택 정렬은 회차마다 최솟값을 찾아 앞자리와 한 번 교환한다. "n회차 후 배열 상태"를 묻는 문제는 어느 정렬인지부터 판별한다.