포인터와 배열 접근

2024. 11. 28. 14:26정보처리,전산/Clang

반응형
#include <stdio.h>

int main(void) {
    int a[4] = {1, 2, 3, 4}; // 정수형 배열 a
    int *ptr = a;           // 포인터 변수 ptr은 배열 a의 시작 주소를 가리킴
    char str[] = "hello";   // 문자열 str 정의
    
    printf("a 배열 첫 번째 요소: %d\n", a[0]);           // 배열의 첫 번째 요소 출력
    printf("a의 시작 주소의 값: %d\n", *ptr);             // 포인터가 가리키는 값 출력
    printf("a의 (시작 주소 + 1)의 값: %d\n", *(ptr + 1)); // 포인터 이동 후 값 출력
    printf("str의 크기: %d\n", (int)sizeof(str));         // 문자열 str의 크기 출력
    printf("str[5]의 값: %c\n", str[5]);                 // str[5]는 '\0'(널 문자) 출력
    printf("ASCII 값의 연산: %d\n", '1' + '0');          // 문자 '1'과 '0'의 ASCII 값의 합
    printf("ASCII 코드로 변환: %d\n", '1');              // 문자 '1'의 ASCII 값 출력

    return 0;
}

코드 실행 해석

1. printf("a 배열 첫 번째 요소: %d\n", a[0]);

  • 배열 a의 첫 번째 요소는 1.
  • 출력 결과: a 배열 첫 번째 요소: 1.

2. printf("a의 시작 주소의 값: %d\n", *ptr);

  • 포인터 ptr은 배열 a의 시작 주소를 가리킴.
  • *ptr은 a[0]을 참조하므로 값은 1.
  • 출력 결과: a의 시작 주소의 값: 1.

3. printf("a의 (시작 주소 + 1)의 값: %d\n", *(ptr + 1));

  • ptr + 1은 배열의 두 번째 요소 a[1]를 가리킴.
  • *(ptr + 1)은 a[1]의 값인 2를 참조.
  • 출력 결과: a의 (시작 주소 + 1)의 값: 2.

4. printf("str의 크기: %d\n", (int)sizeof(str));

  • 문자열 "hello"는 5개의 문자와 마지막 널 문자 \0로 구성됨.
  • 배열 str의 크기는 6.
  • 출력 결과: str의 크기: 6.

5. printf("str[5]의 값: %c\n", str[5]);

  • str[5]는 문자열 "hello"의 널 문자 \0을 참조.
  • 출력 결과: str[5]의 값: (널 문자 출력으로 공백처럼 보임).

6. printf("ASCII 값의 연산: %d\n", '1' + '0');

  • 문자 '1'의 ASCII 값은 49, '0'의 ASCII 값은 48.
  • 49 + 48 = 97.
  • 출력 결과: ASCII 값의 연산: 97.

7. printf("ASCII 코드로 변환: %d\n", '1');

  • 문자 '1'의 ASCII 값은 49.
  • 출력 결과: ASCII 코드로 변환: 49.
a 배열 첫 번째 요소: 1
a의 시작 주소의 값: 1
a의 (시작 주소 + 1)의 값: 2
str의 크기: 6
str[5]의 값: 
ASCII 값의 연산: 97
ASCII 코드로 변환: 49
반응형