Qual è la definizione di puntatore? [duplicare]

4

Concettualmente un "puntatore" è solo qualcosa che "punta" su qualcos'altro: questa definizione è sufficiente per dire esattamente cosa è un puntatore nella programmazione delle lingue? Ha bisogno di avere altre caratteristiche?

I programmatori che provengono da una lingua specifica potrebbero avere idee pre-concepite su ciò che costituisce un "puntatore" basato su come viene utilizzato nella lingua. Diciamo quindi se è tratto dalla lingua c / c ++ , dice che i puntatori supportano l'aritmetica del puntatore. L'aritmetica del puntatore è una caratteristica essenziale di un puntatore?

Vai ha puntatori e non supporta l'aritmetica del puntatore. La capacità di "dereferenziare" il puntatore è essenziale per il concetto di puntatore?

Quindi qual è la definizione precisa di un puntatore che posso dare come risposta, indipendentemente da un linguaggio di programmazione specifico?

    
posta JAVA 25.08.2013 - 08:59
fonte

5 risposte

8

Non conosco alcuna definizione generale per "puntatori" o un altro termine correlato, "riferimenti" . È abbastanza sicuro, tuttavia, dire che i puntatori e i linguaggi di programmazione che supportano i puntatori di solito hanno molte delle seguenti caratteristiche:

risposta data 25.08.2013 - 09:52
fonte
2

What is the definition of pointer?

Che dipende completamente, dalla lingua.

Sia C che C ++ (non esiste un linguaggio come "C / C ++"!) hanno una definizione solida e precisa di puntatori. Ad esempio, C99 dice (§6.2.5.20):

A pointer type may be derived from a function type, an object type, or an incomplete type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type. A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’. The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’.

(sottolineatura mia)

in seguito, quando si descrive l'operatore & (address-of) (§6.5.3.2.3):

The unary & operator yields the address of its operand. If the operand has type ‘‘type’’, the result has type ‘‘pointer to type’’.

Questa interpretazione suggerisce nuovamente che un "puntatore" è semplicemente un indirizzo. (Beh, non semplicemente, ma comunque un indirizzo.)

Is the ability to "dereference" the pointer essential to the concept of a pointer?

Di nuovo, dipende. Concettualmente, Java ha dei puntatori, ma non puoi dereferenziarli. Gli oggetti Objective-C sono anche puntatori, ma il compilatore si lamenta se si sta tentando di dereferenziare un tale puntatore. (Sospetto che questi fenomeni abbiano un'origine comune: i puntatori sono usati in entrambi i linguaggi per rappresentare riferimenti agli oggetti, e a livello di implementazione, sono anche usati per cose intelligenti come il polimorfismo.)

So what is the precise definition of pointer i can answer irrespective of specific programming language?

Sfortunatamente, non esiste una cosa del genere. (Autopromozione spudorata: ma puoi fornire un link a questa risposta se ritieni che sia abbastanza buono: P)

    
risposta data 25.08.2013 - 09:25
fonte
1

Ciò che un puntatore "è" in genere dipende sia dalla lingua, sia dall'implementazione di quella lingua. ad esempio: i puntatori in C / C ++ sono tipicamente int che contengono l'indirizzo di memoria della cosa puntata, tuttavia non devono avere necessariamente. Questo è il modo in cui di solito vengono implementati.

Quindi, pensando alle operazioni che possono essere eseguite su un puntatore, qualsiasi cosa diversa da un "deferenza" è in realtà dipendente dall'implementazione. Essere in grado di eseguire l'aritmetica dei puntatori è spesso utile, ma dipende interamente dall'implementazione sottostante.

I puntatori hanno anche un ruolo secondario in c / c ++ in quanto spesso puntano agli elementi allocati sull'heap piuttosto che sullo stack. Questa differenziazione spesso non viene catturata in altre lingue. Altre lingue tendono ad evitare il termine "puntatore" e usano invece "riferimento" o "alias".

Personalmente, mi piace pensare, in senso generale, a dei puntatori come a uno speciale alias. Ma quando si tratta di C / C ++ tendo a considerare l'intero linguaggio come una questione di memoria, e i puntatori diventano solo un sottoinsieme della gestione della memoria.

    
risposta data 25.08.2013 - 09:23
fonte
1

A pointer is a kind of variable whose value is a reference to a point in the memory of the machine where the program is running.

Essendo variabili che devono supportare operazioni (altrimenti sarebbero inutili), le operazioni supportate possono variare a seconda del linguaggio di programmazione.

Molti nuovi linguaggi di programmazione (come Java) arrivano persino a nascondere i puntatori agli utenti (che potremmo probabilmente dire che in questi linguaggi i puntatori sono variabili che non supportano operazioni).

Direi che qualsiasi operazione sui puntatori deve essere supportata o meno a seconda della struttura della lingua. In qualche modo, i linguaggi di programmazione utilizzano i puntatori, ma il fatto che non tutte le lingue vi consentano di accedere a tali file è indicativo del fatto che le operazioni potrebbero essere necessarie o meno a seconda della struttura della lingua.

    
risposta data 25.08.2013 - 13:39
fonte
-1

Ecco cosa ho imparato in CS:

  1. Una variabile è una posizione con nome di un valore.

  2. Un puntatore è una variabile il cui valore è l'indirizzo della posizione di una variabile.

E sì, a mio parere, i riferimenti in generale sono dereferenziabili.

    
risposta data 25.08.2013 - 12:09
fonte

Leggi altre domande sui tag