vale1411
Genius
1 min. di lettura
Vota

Concetti Chiave

  • In C, le operazioni ammesse sui puntatori includono l'assegnamento tra puntatori dello stesso tipo o puntatori void, e con tipo int (0/NULL).
  • È possibile eseguire addizioni e sottrazioni tra puntatori e int, dove il nuovo indirizzo è calcolato in base alla dimensione del puntatore.
  • La sottrazione tra puntatori è definita solo se puntano allo stesso array o al byte successivo; altrimenti, è indefinita.
  • Le operazioni non consentite includono l'uso di float/double per assegnamenti e operazioni aritmetiche con puntatori.
  • Operazioni pericolose ma sintatticamente valide comprendono assegnamenti e confronti tra puntatori di tipo diverso senza cast, tranne void.

Aritmetica dei puntatori

Se in C si utilizzano determinati puntatori si deve prestare attenzione alle operazioni che si vogliono eseguire.
Le operazioni ammesse sulle variabili puntatore sono:
- Assegnamento tra puntatori(dello stesso tipo o un puntatore void) e con tipi int (con valore 0/NULL)
- Addizione e sottrazione tra puntatori e int (il nuovo indirizzo di memoria è calcolato come moltiplicazione tra dato int e dimensione del puntatore)
- Sottrazione tra puntatori (lo standard IDO C89 dice che l’operazione tra due puntatori che non puntano a elementi dello stesso array o al primo byte dopo l’array sono operazioni non definite)
- Confronto relazionale tra puntatori (dello stesso tipo) e dati int (con valore 0, equivalente a NULL)
Le operazioni non ammesse (causano errore di sintassi) sono:
- Assegnamento con dati float/double
- Addizione e sottrazione tra puntatore e dati float/double
- Addizione tra due puntatori e sottrazioni tra puntatori di tipo diverso
- Confronto relazione con dati float/double
- Le altre operazioni aritmetiche e operazioni bitwise (*, /, %, &, |, ^, ~, >)
Le operazioni sintatticamente permesse ma non pulite e potenzialmente pericolose sono:
- Assegnamento e confronto tra puntatori di tipo differente senza utilizzare l’operatore di cast, eccetto void
- Assegnamento e confronto con dati int diversi da 0

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community