전산 관련 시험/프로그래밍(C, JAVA, Python)

[C] 프로그래밍 언어(23.3 03)

응_비 2024. 10. 5. 17:28
#include <stdio.h>
main() {
    char* p = "KOREA";
    printf("1. %s\n", p);
    printf("2. %s\n", p + 1);
    printf("3. %c\n", *p);
    printf("4. %c\n", *(p + 3));
    printf("5. %c\n", *(p + 4));
}

답:

- char* p = "KOREA";로 문자열을 가리키는 포인터 p가 선언되었습니다.
- 각 출력문은 포인터 연산을 통해 문자열의 특정 위치에 접근하고 있습니다.

실행 결과는 다음과 같습니다:

1. KOREA
2. OREA
3. K
4. E
5. A

설명:

• p는 문자열 "KOREA"를 가리킵니다.
• 첫 번째 출력은 전체 문자열 “KOREA”를 출력합니다.
• 두 번째 출력은 p + 1로 "OREA"를 출력합니다 (두 번째 문자부터 출력).
• 세 번째 출력은 *p로 'K'를 출력합니다.
• 네 번째 출력은 *(p + 3)로 'E'를 출력합니다 (문자열의 네 번째 문자).
• 다섯 번째 출력은 *(p + 4)로 'A'를 출력합니다 (문자열의 다섯 번째 문자).

p와 *p는 C 언어에서 중요한 포인터 개념을 나타내며, 둘의 차이는 다음과 같습니다:

1. p:
p는 포인터 변수로, 메모리 주소를 저장합니다. 즉, p는 어떤 데이터가 저장된 메모리의 주소를 가리킵니다.
• 예를 들어, char* p = "KOREA";에서 p는 문자열 "KOREA"의 첫 번째 문자 'K'가 저장된 메모리 주소를 가리킵니다.
2. *p:
*p는 역참조(dereference) 연산자로, p가 가리키고 있는 메모리 주소에 저장된 값을 의미합니다.
• 예를 들어, *p는 "KOREA"의 첫 번째 문자 **‘K’**를 가리킵니다. 즉, *p는 p가 가리키고 있는 메모리 주소의 실제 값을 가져오는 것입니다.

간단한 예시:

char* p = "KOREA";   // p는 문자열 "KOREA"의 첫 번째 문자의 주소를 가리킴
printf("%s\n", p);   // p는 "KOREA" 전체 문자열을 가리킴, 결과: KOREA
printf("%c\n", *p);  // *p는 p가 가리키는 주소에 있는 값, 즉 'K'를 가리킴, 결과: K

• p는 문자열 "KOREA"의 시작 주소를 가리킴.
• *p는 그 주소에 저장된 첫 번째 문자 'K'를 가리킴.

따라서, p는 메모리 주소를, *p는 그 주소에 저장된 실제 데이터를 의미합니다.