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이 표시됩니다.
x
is Unsigned 16진수 정수(32 Bit )
p
is 포인터 주소
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
'programing' 카테고리의 다른 글
이 C는 왜 유효합니까? (0) | 2022.07.26 |
---|---|
Vuex가 클래스 인스턴스에 간섭하지 않도록 하려면 어떻게 해야 합니까? (0) | 2022.07.26 |
커스텀 컴포넌트 내에서 Vue.js 플러그인을 사용하는 방법 (0) | 2022.07.26 |
조건과 일치하는 스트림의 첫 번째 요소를 가져옵니다. (0) | 2022.07.26 |
vuex 저장소에 바인딩된 Vue 3 확인란이 선택 해제된 후 확인되지 않음 (0) | 2022.07.18 |