Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 %p와 %x 형식 지정자의 차이점 완벽 정리

%p와 %x의 기본 역할

C 또는 C++ 프로그래밍에서 %p는 포인터(메모리 주소) 값을 출력할 때 사용하고, %x는 정수를 16진수 형태로 출력할 때 사용합니다. 포인터 값은 %u%x로도 표시할 수 있기 때문에, 두 형식 지정자의 출력 결과가 비슷해 보일 수 있습니다.

눈에 띄는 핵심 차이점

동일한 값을 두 형식 지정자로 출력하면 큰 차이를 느끼지 못할 수 있습니다. 유일하게 확인할 수 있는 차이점은 다음과 같습니다.

  • %p: 시스템의 포인터 크기에 맞춰 앞쪽을 0으로 채운(선행 0 padding) 형태로 출력합니다.
  • %x: 불필요한 선행 0을 출력하지 않고 순수한 16진수 값만 보여줍니다.

예제 코드

#include<stdio.h>
main() {
   int x = 59;
   printf("Value using %%p: %p\n", x);
   printf("Value using %%x: %x\n", x);
}

실행 결과

Value using %p: 000000000000003B
Value using %x: 3b

추가로 알아두면 좋은 점

  • %pvoid* 타입의 인자를 기대하고, %xunsigned int 타입을 기대합니다. 특히 64비트 시스템에서 포인터를 %x로 출력하면 상위 비트가 잘려 잘못된 주소가 표시될 수 있으므로 주의해야 합니다.
  • 대문자 16진수(A~F)로 출력하고 싶다면 %X를 사용하면 됩니다.
  • 이식성(portability)을 고려한다면 포인터 출력에는 반드시 %p를 사용하는 것이 안전합니다.