Puntatori o no

2

Questa è una domanda accademica, ma penso che solo i programmatori professionisti siano le persone che possono rispondere a questa domanda.

Is it true that whatever we can do with pointers, we can do without them as well?

Questo è qualcosa di cui ho parlato uno dei miei insegnanti universitari e non mi è mai importato di scoprirlo, ora sembra che debba farlo. Io e un altro programmatore abbiamo avuto una grande discussione su questo argomento e dato che non sono abbastanza qualificato con C, ho perso l'argomento (era contrario alla mozione).

Stiamo parlando della lingua C qui.

    
posta Jishan 13.07.2016 - 16:45
fonte

4 risposte

4

Non penso che potresti usare l'heap (tramite malloc, o persino l'allocazione dello stack tramite alloca) senza i puntatori in C, poiché queste funzioni restituiscono i puntatori; quindi, dovresti rinunciare all'allocazione della memoria. Senza allocazione di memoria, sei paralizzato; potrebbe anche scrivere in Fortran '66 - che tra l'altro riguarda la scrittura di codice usando array di dimensioni fisse in fase di compilazione, che divertimento! (Ovviamente, Fortran non ha nemmeno le strutture quindi hai bisogno di più array paralleli per fare qualcosa di utile.)

Ora, ricorda che anche gli array in C vengono trattati come puntatori non appena li usi in un'espressione, come l'indicizzazione / indicizzazione, quindi non sono sicuro di come lo classificheresti come per la tua domanda; mentre in Fortran, un array è un oggetto di prima classe che è possibile utilizzare senza essere considerato un puntatore.

C #, Java (e C ++) hanno tutti alternative ai puntatori (cioè riferimenti) che consentono l'allocazione della memoria senza puntatori.

    
risposta data 13.07.2016 - 17:08
fonte
5

Risposta del programmatore professionista: qualsiasi cosa tu possa fare facilmente, puoi farlo in modo duro. A volte in un modo molto difficile che solo i masochisti prenderebbero in considerazione. Tutto ciò che puoi fare con un escavatore che puoi fare con una pala. Tutto ciò che puoi fare con una pala che puoi fare con un cucchiaino.

Sì, tutto ciò che puoi fare con i puntatori che puoi fare senza riferimenti. Grazie a Gödel, tutto ciò che puoi fare con un array può essere fatto con un numero intero enorme. Solo trilioni di volte più complicato e più lento.

La vera domanda: perché mai lo faresti?

(Ovviamente puoi nascondere i puntatori in un linguaggio di programmazione usando altri nomi di cose come riferimenti, matrici ecc. Sotto il cofano, hai ancora dei puntatori.)

    
risposta data 17.07.2016 - 15:43
fonte
4

È possibile utilizzare un enorme array di byte e sostituire i puntatori con indici di array. A parte interagire con codice / hardware esterno che prevede puntatori, equivale a usare il puntatore.

(Anche se nell'indicizzazione C nell'array viene definita la degradazione dell'array verso il puntatore, quindi tecnicamente implica ancora un puntatore)

    
risposta data 13.07.2016 - 17:08
fonte
3

Dipende da cosa intendi facendo.

In senso stretto, qualsiasi algoritmo del computer può essere fatto con una macchina di turing o per la questione con qualcosa che lo simula. E non è come una macchina di turazione ha bisogno di puntatori, o variabili, o anche di codice per la materia.

Quindi sì, si può fare, ma sarebbe arrivato con cose come l'esecuzione più lenta e problemi di chiarezza.

    
risposta data 17.07.2016 - 14:02
fonte

Leggi altre domande sui tag