hrming

[정보처리기사] 포인터 연산 본문

기타/정보처리기사

[정보처리기사] 포인터 연산

hrming 2024. 9. 30. 00:48

■ 포인터 연산

- 포인터 연산은 +, -, ++, -- 연산자를 사용하여 포인터 값을 증가/감소시키는 연산이다. (주소이므로 곱셈/나눗셈 불가 ❌)

( 예를 들어 크기가 4바이트인 int형 변수의 주소 100번지에 1을 더한 결과는 101이 아닌 104가 이며, 연산 결과 또한 주소 )

주소± ( 정수 * 주소를 구한 변수의 크기 ) 

 

#include <stdio.h>

int main(void)
{
    char *ptr1 = NULL;    // NULL 포인터
    int *ptr2 = NULL;     // NULL 포인터
    double *ptr3 = NULL;  // NULL 포인터

    // 포인터 출력 시 %p 사용
    printf("%p번지, %p번지, %p번지\n", (void*)ptr1, (void*)ptr2, (void*)ptr3);

    // 포인터 증가
    ptr1++;
    ptr2++;
    ptr3++;

    printf("%p번지, %p번지, %p번지\n", (void*)ptr1, (void*)ptr2, (void*)ptr3);

    return 0;
}

 

1. 세 포인터는 모두 NULL(즉, 0번지)로 초기화되어 있으므로, 첫 번째 출력은 세 포인터 모두 0x0을 출력

 

2. 각 포인터의 크기만큼 메모리 주소가 증가

  • char *ptr1는 1바이트 증가 (보통 1 증가)
  • int *ptr2는 4바이트 증가 (보통 4 증가)
  • double *ptr3는 8바이트 증가 (보통 8 증가)

3. 결과

0x0번지, 0x0번지, 0x0번지
0x1번지, 0x4번지, 0x8번지

 

■ (void*) :  void*는 C 언어에서 자료형이 없는 포인터를 의미


참고 및 출처 :

https://sejong-kr.libguides.com/c.php?g=942235&p=6822367

 

chatGPT

Comments