기능사 시험에 자주 나오는 포인터 유형을 모았어요. 5단계 강의를 본 뒤 풀어 보세요.
다음 프로그램의 출력 결과는?
#include <stdio.h>
int main() {
int a = 10, b = 20;
int *p = &a;
printf("%d ", *p);
p = &b;
printf("%d", *p);
return 0;
}
10 20
다음 프로그램의 출력 결과는?
#include <stdio.h>
int main() {
char *p = "KOREA";
printf("%s\n", p);
printf("%s\n", p + 3);
printf("%c\n", *p);
printf("%c\n", *(p + 3));
printf("%c\n", *p + 2);
return 0;
}
KOREA EA K E M
char *q = "ABC"; 일 때 printf("%c", *(q+1)); printf("%c", *q+1); 의 출력은?
B B
다음 프로그램의 출력 결과는?
#include <stdio.h>
int main() {
int a[] = { 10, 20, 30 };
int *p = a;
printf("%d ", *p);
printf("%d ", *(p + 1));
printf("%d", *(p + 2));
return 0;
}
10 20 30
다음 프로그램의 출력 결과는?
#include <stdio.h>
int main() {
int x = 5, y = 10;
int *p = &x;
*p = *p + 5;
printf("%d %d", x, y);
return 0;
}
10 10
다음 프로그램의 출력 결과는?
#include <stdio.h>
int main() {
int a[4] = { 1, 2, 3, 4 };
int *p = a;
int sum = 0;
for (int i = 0; i < 4; i++)
sum += *(p + i);
printf("%d", sum);
return 0;
}
10
int b[] = { 2, 4, 6 }; int *p = b; printf("%d", *p + *(p+1) + *(p+2)); 의 출력은?
12
다음 프로그램의 출력 결과는? (기능사에서 가끔 출제)
#include <stdio.h>
struct Data { int n; };
int main() {
struct Data d = { 100 };
struct Data *p = &d;
printf("%d", p->n);
return 0;
}
100
struct T { int x; }; struct T v = { 50 }; struct T *r = &v; printf("%d", r->x + 10); 의 출력은?
60
기능사 한 단계 위 난이도. 포인터 연산·함수 인자·포인터 증감을 다룹니다.
[심화 1] p++, *p++ 의 차이 – 다음 출력은?
#include <stdio.h>
int main() {
int a[] = { 10, 20, 30 };
int *p = a;
printf("%d ", *p++);
printf("%d ", *p);
return 0;
}
10 20
[심화 2] 함수에 포인터 넘기기 – 다음 출력은?
#include <stdio.h>
void add(int *p) { *p = *p + 10; }
int main() {
int n = 5;
add(&n);
printf("%d", n);
return 0;
}
15
[심화 3] 두 포인터로 스왑 – 다음 출력은?
#include <stdio.h>
int main() {
int x = 3, y = 7;
int *p = &x, *q = &y;
int t = *p; *p = *q; *q = t;
printf("%d %d", x, y);
return 0;
}
7 3
*p = 값, p = 주소, &a = a의 주소*p+2는 (*p)+2 (값에 2 더함, ASCII에서 자주 나옴). *(p+2)는 p에서 2칸 뒤의 값.%s는 (주소부터) 문자열, %c는 한 문자. *(p+i)는 i번째 문자.d.n, 포인터는 p->n (화살표 한 번만).*p+1과 *(p+1)을 혼동. 전자는 "가리키는 값+1", 후자는 "다음 칸의 값".
printf("%s", *p);처럼 %s에 *p를 넣으면 안 됨. %s에는 주소(p)를 넣어야 함.
p.n이라고 쓰면 오류. 반드시 p->n.
*p = p가 가리키는 값, &a = a의 주소%s는 주소부터 출력, %c는 한 글자. *p+2는 (값)+2 (ASCII 연산)*(p+i) = p[i] = 배열 i번째 요소p->멤버