Scrivere dentro un array con puntatore

di il
8 risposte

Scrivere dentro un array con puntatore

Ciao , sto giocando con i puntatori ,

Ho un' array di 10 elementi non inizializzati.
Scrivo nella prima locazione ( zero).
Scrivo nella seconda locazione (uno).

Quando stampo , mi accorgo che ha solo scritto nella prima locazione (zero)
mentre la seconda non è inizializzata.

Perchè non scrive nella seconda locazione ?

int * test(void);
int main()
{
	int* arr;

	std::cout << "Hello World!\n";
	arr = test();
	for (int i = 0; i < 10; i++) {

		cout << " number " << arr[i] << endl;
	}
}

int* test(void) {

	int arr[10];  // dichiaro un array int con 10 elementi
	int *p = arr; // dichiaro un puntatore p che punta all'indice zero di arr[]
			  // l'asterisco si legge << il valore puntato da >>. In questo caso il valore puntato da p = arr

	*p = 1;  // Si legge il valore puntato da p = 1
	p++;	 // incremento di una locazione di memoria ( dovrebbe essere  arr[1] )
	*p = 2;  // Si legge il valore puntato da p = 2

	return arr;
}

8 Risposte

  • Re: Scrivere dentro un array con puntatore

    Guarda che arr del main e arr della funzione sono puntatori a due diversi array.

    Hai studiato la visibilità delle variabili? Sai cosa sono le variabili locali?
  • Re: Scrivere dentro un array con puntatore

    Si scusami , le ho in teoria studiate. Mi è sfuggito
    Grazie
  • Re: Scrivere dentro un array con puntatore

    Fai qualche esercizio sulla teoria che hai visto perché mi sa che non hai ancora chiari quei concetti
  • Re: Scrivere dentro un array con puntatore

    Ciao si certamente , ti stavo rispondendo così poi ho letto l'avviso del forum

    Nella funzione ho sostituito la dichiarazione di arr così:
    
    int *arr = new int[10]; // Alloco dinamicamente un array in quanto diversamente sarebbe automatica/locale
    
    in main() ho aggiunto alla fine , quindi dopo aver stampato
    
    delete (arr);
    
    Il delete ha eliminato il blocco di memoria puntato da arr , ma non ha distrutto il puntatore.Credo sia il comportamento di Delete
    grazie

    Comunque si continuo con array , memoria ecc
  • Re: Scrivere dentro un array con puntatore

    Ma hai restituito arr dalla funzione o hai usato quello del main? Mostra nuovamente tutto il codice...
  • Re: Scrivere dentro un array con puntatore

    Eccolo
    
    int * test(void);
    
    int main()
    {
    	int* arr;
    
    	std::cout << "Hello World!\n";
    	arr = test();
    	for (int i = 0; i < 10; i++) {
    
    		cout << " number " << arr[i] << endl;
    	}
    
    	delete (arr);
    
    }
    
    int* test(void) {
    
    	
    	int *arr = new int[10]; // Alloco dinamicamente un array in quanto diversamente sarebbe automatica/locale
    	int *p = arr; // dichiaro un puntatore p che punta all'indice zero di arr[]
    				  // l'asterisco di legge << il valore puntato da >>. In questo caso il valore puntato da p = arr
    	int **p2;	  // dichiaro un puntatore ad un puntatore
    
    	*p = 1;  // Si legge il valore puntato da p = 1
    	p++;	 // incremento di una locazione di memoria
    	*p = 2;  // Si legge il valore puntato da p = 2
    
    	return arr;
    }
    
    
    
  • Re: Scrivere dentro un array con puntatore

    Ok ma p2 non ti serve e la delete deve essere

    delete[] arr;
  • Re: Scrivere dentro un array con puntatore

    Ok perfetto grazie
Devi accedere o registrarti per scrivere nel forum
8 risposte