C - printf - Adresse ausgeben mit %p
Verfasst: 10.08.2022, 11:21
Ich bin auf folgende Diskussion gestossen, im Zusammenhang mit const.
Gruss starcow
Stimmt das tatsächlich? Ist es ohne den cast nach void pointer ein "undefined behavior"? Müsste ich also immer in einen void pointer casten, ehe ich eine Adresse ausgebe?I'd recommend a cast to a pointer to void if you're using the %p conversion specifier. Sure it might seem to work how it's supposed to on most implementations even without the cast, but to be pedantic, this is undefined behavior.Code: Alles auswählen
printf("&A = %p\n",&A);
The %p conversion specifier expects a pointer to void, and if any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
From the C standard draft n1570 (The fprintf function) (didn't write exactly where it is in the standard draft, because YouTube doesn't seem to like it if you put a lot of numbers in your comment) (emphasis mine):
p The argument shall be a **pointer to void**. The value of the pointer is converted to a sequence of printing characters, in an implementation-defined manner.
Code: Alles auswählen
int x;
printf("%p", (void*)&x);