Concetti Chiave

  • Le operazioni ammesse sui puntatori in C includono assegnamento tra puntatori dello stesso tipo, addizione e sottrazione con interi, e confronto relazionale con dati int.
  • Le operazioni non ammesse causano errori di sintassi e comprendono assegnamento con float/double e addizioni tra puntatori di tipo diverso.
  • Le sottrazioni tra puntatori sono definite solo se puntano a elementi dello stesso array o al primo byte dopo l'array, secondo lo standard C89.
  • Le operazioni pericolose, sebbene sintatticamente permesse, includono assegnamento tra puntatori di tipo diverso senza cast e confronto con dati int diversi da 0.
  • È importante prestare attenzione alle operazioni sui puntatori per evitare comportamenti imprevisti e errori di programmazione.

Operazioni ammesse sui 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)

Operazioni non ammesse

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 (*, /, %, &, |, ^, ~, >)

Operazioni pericolose

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 da interrogazione

  1. Quali sono le operazioni ammesse sui puntatori in C?
  2. Le operazioni ammesse includono l'assegnamento tra puntatori dello stesso tipo, addizione e sottrazione tra puntatori e interi, sottrazione tra puntatori (solo se puntano allo stesso array) e confronto relazionale tra puntatori dello stesso tipo e interi (equivalenti a NULL).

  3. Quali operazioni sono vietate quando si lavora con i puntatori?
  4. Le operazioni non ammesse comprendono l'assegnamento con dati float/double, addizione e sottrazione tra puntatori e float/double, addizione tra puntatori di tipo diverso e altre operazioni aritmetiche e bitwise.

  5. Cosa si intende per operazioni pericolose sui puntatori?
  6. Le operazioni pericolose sono quelle sintatticamente permesse ma potenzialmente rischiose, come l'assegnamento e il confronto tra puntatori di tipo differente senza cast, e l'assegnamento con dati int diversi da 0.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community