본문 바로가기

Education

[부스트 코딩 뉴비 챌린지 2020] C언어: %p와 %x의 차이점은?

반응형

메모리의 주소값을 표현할 때 보통 16진수로 나타낸다. 16진수를 나타낼 때 형식 연산자로 %x를 사용한다. 하지만, 메모리 주소값을 알고 싶을 때 사용하는 형식 연산자 %p도 존재한다는 것을 우리는 알고 있다.

그렇다면 형식 연산자 %p와 %x의 차이점은 무엇일까? 간단한 예제를 통해 알아보자.

#include <stdio.h>

int main(void){
	int a = 10;
    
    printf("x : %x\n", &a);
    printf("p : %p\n", &a);
    
    printf("x : %x\n", a);
    printf("p : %p\n", a);
}
ERROR
p : 0x7ffe9385607c


x : 64
ERROR

맨 아래 출처의 예에 의하면 위의 네 값은 모두 나온다. 하지만 나의 경우, 출력에 위와 같은 에러가 발생하여 실행이 되지 않았다. 에러의 내용은 선언한 자료형과 형식 연산자가 매칭이 되지 않아 출력을 할 수 없다는 내용이었다.

 

그래서 나의 결론은 "메모리 주소를 나타낼 때에는 %p를 사용하고, 메모리 값이 아닌 일반 값을 16진수로 나타내고 싶을 때에는 %x를 사용하자" 이다.

부스트 강의를 수강하면서 작성하였던 코드를 다시 살펴보니, 메모리 주소를 나타낼 때에는 모두 %p를 사용했더라.

반응형