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
- Quali sono le operazioni ammesse sui puntatori in C?
- Quali operazioni sono vietate quando si lavora con i puntatori?
- Cosa si intende per operazioni pericolose sui puntatori?
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).
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.
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.