서론
이번에는 정처기에서 등장하는 포인터 관련 문제를 풀어보고자 한다. 본 포스팅은 우선 문제를 보고, 바로 어떻게 풀었는 지 적겠다.
문제
#include <stdio.h>
int main() {
char a[] = "Art";
char * p = NULL;
p = a;
printf("%s\n", a);
printf("%c\n", * p);
printf("%c\n", * a);
printf("%s\n", p);
for (int i = 0; a[i] != '\0'; i++)
printf("%c", a[i]);
}
위 코드 출력 값을 작성하는 문제임.
풀이
위 문제는 포인터 문제로 포인터가 가리키는 것을 출력하는 문제다. 선언할 때 *는 포인터라는 뜻, 사용할 때 *는 값이라는 점을 기억해야 된다. 첫번째 "%s\n"은, a를 그대로 출력하면 된다. 그러니까 Art. 여기까진 잘 하지만 두번째부터 포인터가 등장하는데, printf("%c/n", *p)를 하면 p가 가리키는 값을 c 형태로 출력하는 것이다. p=a이므로 art의 첫번째 원소를 가리키는 상황이다. 그러니까 A를 출력하면 됨. 세번째는 printf("%c/n", *a) 를 하라고 한다. a는 Art를 가리키고 있기에 결국 위와 같다고 한다. 나머지는 그대로 Art 적으면 됨. 고로 정답은 아래와 같이 된다.
Art
A
A
Art
Art
printf("%c/n", *a) 관련 첨언
a는 포인터가 아닌데 왜 포인터처럼 사용하는가?에 대해서 말하고자 한다. a는 char 배열이다. 그런데 배열의 이름 a는 첫번째 요소의 주소로 변환 될 수 있는 형태이다. 그래서 위에서 p=a가 p=&a[0]으로 굳이굳이 선언되지 않아도 암묵적으로 ㅇㅋ하고 a의 첫번째 원소의 주소를 가리킬 수 있는 것이다. 즉, a는 포인터는 아니지만, a를 사용할 때 포인터처럼 사용한다는 것.
'IT, Computer' 카테고리의 다른 글
[정보처리기사] 프로그래밍 언어 문제 풀이 (3) - 딕셔너리 (0) | 2025.04.08 |
---|---|
[정보처리기사] 프로그래밍 언어 문제 풀이 (2) - 정적 변수 (0) | 2025.04.07 |
OSError: [WinError 10014] 호출에 대한 포인터 인수를 사용하려는 동안 시스템에서 잘못된 포인터 주소를 감지했습니다. 해결법 (0) | 2025.03.01 |
[백준] BOJ 15649, N과 M (1) 파이썬 Python (0) | 2025.02.17 |
[백준] BOJ 1012, 유기농 배추 파이썬 Python (0) | 2025.02.12 |