Domanda

Qualcuno mi ha detto questo po 'di stampe di codice 29. Perché?

int *a = 17; 
printf("%d", a+3);
È stato utile?

Soluzione

Perché quando si aggiunge a un puntatore si aggiunge la dimensione dell'oggetto. In questo caso la dimensione dell'oggetto è 4 (sizeof (int) == 4) -. Modo 17 + 3 * 4 == 29

Altri suggerimenti

Tutti sanno la risposta è 23, almeno sul 6809.

a+3 == a + (3 * sizeof(int)) == a + 6 == 17 + 6 == 23
a+3 == a + (3 * sizeof(int)) == a + 12 == 17 + 12 == 29

In puntatori linguaggio C non possono essere inizializzati con valori interi, con la sola eccezione di un'espressione costante integrale che valuta a zero integrale. 17 non soddisfa tale requisito.

È codice non è valido. Lo fa non era nulla di "stampa". La domanda ha alcun senso. Qualsiasi tentativo di analizzare la questione dal punto di vista del l'aritmetica dei puntatori sono rifiuti ridicoli e solo inutile di tempo.


ISO / IEC 9899: 1999 (programmazione Lingue - C)

  

6.5.16.1 assegnazione semplice

     

Vincoli

     

una delle seguenti ricoprire: 93)

     

- l'operando sinistro è qualificato o tipo aritmetico non qualificata e il diritto ha   tipo aritmetico;

     

- l'operando sinistro ha una versione qualificato o non qualificato di un tipo di struttura o unione   compatibile con il tipo di destra;

     

- entrambi gli operandi sono puntatori a versioni qualificate o non qualificate di tipi compatibili,   e il tipo a cui punta sinistra ha tutti i qualificatori del tipo puntato dal   destra;

     

- un operando è un puntatore a un oggetto o tipo incompleto e l'altro è un puntatore a una   versione qualificato o non qualificato del vuoto, e il tipo a cui punta sinistra ha tutte   le qualificazioni del tipo puntata da destra;

     

- l'operando sinistro è un puntatore e il diritto è una costante puntatore nullo; o

     

-. L'operando a sinistra è di tipo _Bool e il diritto è un puntatore

     

93) L'aspetto asimmetrico di questi vincoli rispetto al tipo qualificatori è dovuto alla conversione   (Specificato in 6.3.2.1) che cambia lvalue a ‘‘il valore dell'espressione’’ che elimina ogni tipo   qualificazioni dalla categoria tipo dell'espressione.

può stampare qualsiasi cosa .. si sta impostando un puntatore alla posizione '17' nella memoria ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top