2012-09-27 13 views
5

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?

+0

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. –

risposta

6

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).

3

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);

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.