Domanda

Questa è stata un'intervista di collocamento che ho affrontato. Mi hanno chiesto se possiamo riassegnare l'array, ho detto di sì. Poi hanno chiesto - quindi perché abbiamo bisogno di puntatori poiché la maggior parte delle persone spiega perché spreca spazio nella memoria. Non sono riuscito a dare una risposta soddisfacente. Se un organismo può dare una risposta soddisfacente, sarò obbligato. Si prega di menzionare qualsiasi situazione in cui la dichiarazione di cui sopra può essere in contraddizione.

Grazie.

È stato utile?

Soluzione

È possibile riallocare solo un array allocato dinamicamente. Se è stato allocato staticamente, non può essere riallocato [in modo sicuro]. *

I puntatori contengono indirizzi di dati in memoria. Possono essere allocati, deallocati e riallocati dinamicamente usando gli operatori new / delete in C ++ e malloc / free in C.

Consiglio vivamente di leggere Il linguaggio di programmazione C di Kernighan e Ritchie e un solido testo C ++ come C ++ From the Ground Su di Herbert Schildt.

L'uso di memoria dinamica, puntatori, offset, ecc. sono tutti fondamentali per usare queste due lingue. Non sapere come funzionano e perché esistono saranno una ragione probabile per i potenziali datori di lavoro che ti rifiutano.

* il compilatore non dovrebbe consentirti di riallocare tutto ciò che è stato allocato staticamente, ma se lo fa, il comportamento non è definito

Altri suggerimenti

Il fraseggio è un po 'strano, ma a me sembra che la domanda dell'intervista fosse una domanda a risposta aperta progettata per farti spiegare ciò che sai di array, puntatori, allocazione dinamica della memoria, ecc. Se fossi l'intervistatore io Vorrei che il candidato articolasse le differenze tra int * a = malloc (10 * sizeof (int)); e int a [10]; . La domanda di follow-up non è formulata molto bene, ma probabilmente è stato un tentativo di dare una spinta al candidato nella direzione della differenza tra un puntatore e un array e far partire il treno del pensiero.

OK. Non è possibile riallocare un array dichiarato staticamente. Lo scopo di utilizzare i puntatori (anziché l'array dichiarato staticamente) sarebbe di riallocare lo spazio. Immagino che, per essere tecnicamente corretti, è possibile riallocare un array definito staticamente passando un puntatore ad esso, ma non vorrei. Il comportamento non è definito se il puntatore è alla memoria che non è stato allocato da malloc.

Non capisco davvero come usare i puntatori " spreca memoria " ;. La funzione realloc: -

void *realloc(void *ptr, size_t size);

utilizza un puntatore alla memoria per ridimensionare come parametro. Inoltre, ci sono molti più usi per i puntatori rispetto alla memoria dinamica, passando ad esempio per riferimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top