programing

printf에서 '%p'은 어디에 유용합니까?

goodsources 2022. 7. 26. 23:42
반응형

printf에서 '%p'은 어디에 유용합니까?

결국, 이 두 진술은 같은 일을 합니다...

int a = 10;
int *b = &a;
printf("%p\n",b);
printf("%08X\n",b);

예를 들어 (주소가 다른 경우)

0012FEE0
0012FEE0

포인터를 원하는 대로 포맷하는 것은 간단합니다.%x, 그럼, 의 적절한 용도는 무엇입니까?%p옵션?

그들은 같은 일을 하지 않는다.후자의 진술은 다음과 같이 해석한다.b로서unsigned int(그것은 틀렸습니다)b는 포인터입니다.

포인터 및unsigned int는 항상 같은 사이즈는 아니기 때문에 서로 교환할 수 없습니다.크기가 동일하지 않은 경우(64비트 CPU와 운영체제가 보편화됨에 따라 점점 더 일반적인 경우)%x는, 주소의 반만 인쇄합니다.Mac(및 일부 다른 시스템)에서는 주소가 파괴되고 출력이 잘못될 수 있습니다.

항상 사용%p포인터입니다.

적어도, 그다지 드물지 않은 시스템에서는, 같은 인쇄가 행해지지 않습니다.

~/src> uname -m
i686
~/src> gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
[some output snipped]
gcc version 4.1.2 (Gentoo 4.1.2)
~/src> gcc -o printfptr printfptr.c
~/src> ./printfptr
0xbf8ce99c
bf8ce99c

포인터 버전에 의해 어떻게 추가되는 것에 주의해 주세요.0x예를 들어 프레픽스입니다.포인터의 크기와 그것들을 텍스트로 가장 잘 표현하는 방법을 알고 있기 때문에 항상 %p를 사용하십시오.

디버깅이 필요한 경우 printf를 사용하여%p옵션은 매우 도움이 됩니다.값이 NULL인 경우 0x0이 표시됩니다.

xis Unsigned 16진수 정수(32 Bit )

pis 포인터 주소

C++ 레퍼런스의 printf 를 참조해 주세요.둘 다 같은 글을 쓴다 해도%p포인터를 인쇄합니다.

신뢰할 수 없습니다.%p표시0x프레픽스Visual C++에서는 그렇지 않습니다.사용하다%#p휴대할 수 있습니다.

x는 t 포인터 인수를 16진수로 출력하기 위해 사용합니다.

다음을 사용하여 인쇄할 때 일반적인 주소%x처럼 보일 것이다bfffc6e4올바른 주소를 출력할 수 있습니다.%p되지요0xbfffc6e4

포인터의 사이즈가 다른 경우가 있습니다.int또, 실장에서는, 사용했을 때에, 주소의 단순한 16 진수치보다 더 좋은 표현을 얻을 수 있습니다.%p.

언급URL : https://stackoverflow.com/questions/2369541/where-is-p-useful-with-printf

반응형