Il seguente codice mi dà l'output come 'd':C "% d" di formato
void main()
{
short int a=5;
printf("%d"+1,a);
getch();
}
Come funziona printf()
effettivamente lavoro?
Il seguente codice mi dà l'output come 'd':C "% d" di formato
void main()
{
short int a=5;
printf("%d"+1,a);
getch();
}
Come funziona printf()
effettivamente lavoro?
printf
non lo fa "vedi" l'identificatore di formato perché stai passando un puntatore a "%d"
più uno. Ciò equivale a passare "d"
da solo:
printf("d", a);
stamperà d
e ignorare a
. Questo non è specifico per printf
, l'aritmetica del puntatore funziona in questo modo con tutti i puntatori char
, inclusi i puntatori ottenuti da stringhe letterali (cioè sequenze di caratteri con doppie virgolette).
qui è il problema printf("%d"+1,a);
è solito visualizzare perché c'è un solo formato specificatore e questo ("% d" +1) generare l'errore
può essere sia printf("%d+1",a);
o printf("%d",a+1);
Le stringhe come "% d" sono espressioni matrice, e nella maggior parte dei contesti un'espressione matrice verranno convertiti in un'espressione puntatore il cui valore è l'indirizzo del primo elemento dell'array:
Item Address 00 01 02 03 ----- ------- -- -- -- -- "%d" 0xfffbec00 '%' 'd' 0 ??
La stringa letterale "% d" inizia all'indirizzo 0xfffbec00 (ad esempio). Scrivendo "%d"+1
, si aggiunge 1 al valore del puntatore risultante (dando 0xfffbec01), quindi si passa effettivamente la stringa letterale "d" a printf
.
Poiché la stringa "d" non contiene un identificatore di formato, printf
stampa la stringa così com'è. L'argomento a
è valutato prima di essere passato a printf
, ma viene altrimenti ignorato.
http://kkmaterials.blogspot.in/2012/06/printf-function-questions-and-answer.html Penso che la stessa domanda sia stata posta qui. prova a cercare le tue domande prima di chiedere qui. di pubblicare le domande con gli stessi valori di questo sito, non significa che hai fatto i compiti a casa. –