반응형
printf 형식 지정(%d 대 %u)
의 차이점은?%d
그리고.%u
포인터 주소를 인쇄할 때?
예를 들어,
int a = 5;
// check the memory address
printf("memory address = %d\n", &a); // prints "memory address = -12"
printf("memory address = %u\n", &a); // prints "memory address = 65456"
포맷 이스케이프 목록은 이 페이지에서 찾을 수 있습니다.
%d
는 부호가 있는 정수인 반면%u
는 부호가 없는 정수입니다.포인터(숫자로 처리될 경우)는 일반적으로 음이 아닙니다.
포인터를 표시하려면%p
형식 지정자.
%u는 부호 없는 정수를 인쇄합니다.
%d은(는) 부호가 있는 정수를 인쇄합니다.
포인터 주소를 가져오려면 %p를 사용합니다.
다른 형식 지정 탈출 목록:
포맷 이스케이프의 전체 목록은 다음과 같습니다.저는 이 페이지에서 스크린샷을 제공하고 있습니다.
내가 당신의 질문을 정확하게 이해했다면 당신은%p
포인터가 사용 중인 주소를 표시하려면 다음과 같이 하십시오.
int main() {
int a = 5;
int *p = &a;
printf("%d, %u, %p", p, p, p);
return 0;
}
는 다음과 같은 것을 출력합니다.
-1083791044, 3211176252, 0xbf66a93c
%u는 부호 없는 정수에 사용됩니다.부호가 있는 정수 주소 연산자 %d에서 지정한 메모리 주소는 -12이므로, 이 값을 부호가 없는 정수로 얻기 위해 컴파일러는 이 주소의 부호가 없는 정수 값을 반환합니다.
차이점은 간단합니다. 컴파일할 때 다른 경고 메시지가 표시됩니다.
1156942.c:7:31: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("memory address = %d\n", &a); // prints "memory add=-12"
^
1156942.c:8:31: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("memory address = %u\n", &a); // prints "memory add=65456"
^
만약 당신이 당신의 포인터를 a로 넘기게 됩니다.void*
사용.%p
변환 지정자로 다음과 같은 오류 메시지가 표시되지 않습니다.
#include <stdio.h>
int main()
{
int a = 5;
// check the memory address
printf("memory address = %d\n", &a); /* wrong */
printf("memory address = %u\n", &a); /* wrong */
printf("memory address = %p\n", (void*)&a); /* right */
}
형식 지정자 %u는 서명되지 않은 정수를 인쇄하는 데 사용되는 반면 %d은 서명된 정수에 사용됩니다.
언급URL : https://stackoverflow.com/questions/1156942/printf-formatting-d-versus-u
반응형
'programing' 카테고리의 다른 글
$.get()에서 오류를 처리하는 방법 (0) | 2023.10.22 |
---|---|
AngularJS $resource 오류 - TypeError: 개체 #에 'push' 메서드가 없습니다. (0) | 2023.10.22 |
워드프레스 크론은 wp_mail()을 발사하지 않고 php mail() 기능을 합니다. (0) | 2023.10.22 |
오라클 저장 프로시저 실행 시간이 실행 방식에 따라 크게 증가하는 이유는 무엇입니까? (0) | 2023.10.22 |
Angular의 사용자 정의 양식 구성요소에서 FormControl에 액세스합니다. (0) | 2023.10.22 |