Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1

    [C++] puntatore, questo sconosciuto

    Ragazzi scusatemi, se in un programma aggiorno un puntatore (anche ad int) per esempio:

    int* Ptr;

    for(int i=0; i<=N; i++)
    {
    *Ptr=i;
    Ptr++
    }

    e voglio assegnare questo puntatore ad un altro dello stesso tipo per esempio:

    int* New_Ptr;
    New_Ptr = Ptr - N;

    è corretto scrivere così? Cioè ci devo assegnare l'indirizzo che puntava all'inizio o basta scrivere

    New_Ptr = Ptr; ?
    Ci sono solo due cose infinite: l'universo e la stupidità umana. Ma non sono del tutto sicuro della prima

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Guarda che tutti i puntatori utilizzati per allocare memoria, vanno utilizzati alla fine per deallocare la memoria stessa, altrimenti avrai problemi in seguito.

    Quindi, NON devi variare il valore dei puntatori ma usarne di temporanei, se e' il caso.

    Ovvero

    codice:
    int *Ptr;
    
    int *tPtr=Ptr;
    for(int i=0; i<=N; i++)
    {
      *tPtr=i;
      tPtr++
    }
    Cosi' il valore originale del puntatore potra' SEMPRE essere utilizzato, anche, alla fine, per deallocare la memoria puntata.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il problema è che per me l'intero N è anche la dimensione del vettore New_Ptr e lo trovo solo in maniera dinamica, quindi se Ptr puntasse per esempio a string, come devo fare a modificare Ptr e poi assegnarlo ad un New_Ptr che ha dimensione trovata dinamicamente?
    Ci sono solo due cose infinite: l'universo e la stupidità umana. Ma non sono del tutto sicuro della prima

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da giulio.dr
    Il problema è che per me l'intero N è anche la dimensione del vettore New_Ptr e lo trovo solo in maniera dinamica, quindi se Ptr puntasse per esempio a string, come devo fare a modificare Ptr e poi assegnarlo ad un New_Ptr che ha dimensione trovata dinamicamente?
    Non ho capito quasi nulla ...

    N e' un valore che conosci prima dell'inizio del for ... che problema c'e'?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ti spiego:
    dovrei leggere un file di testo riga per riga e riconscere particolari righe di questo file (per esempio quelle che contengono un carattere speciale 'character'); di queste particolari righe devo estrarre una sottostringa e creare un vettore di queste sottostringhe.
    In pratica:

    tPtr = new string[1000];
    int Numero_Righe = 0;

    while (!feof(fd))
    {
    if( character != 0)
    {
    estrai sottostringa e memorizzala in *tPtr;
    Numero_Righe++;
    }
    }

    New_Ptr = new string[Numero_Righe];

    Poi memorizza le stringhe di tPtr in New_Ptr che è un vettore di stringhe di dimensione [Numero_Righe], dove Numero_Righe è trovato dinamicamente.

    delete tPtr; //dealloca tPtr

    La funzione che estrae la sottostringa l'ho già fatta, non so come fare il passaggio da un puntatore ad un altro. Mi sono spiegato meglio?
    Ci sono solo due cose infinite: l'universo e la stupidità umana. Ma non sono del tutto sicuro della prima

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Continuo a non capire ... anzi ho qualche dubbio in piu' ...

    Perchè dichiari 1000 string all'inizio?

    Perche' non leggi linea per linea e conservi solo quella che ti serve?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon

    Perche' non leggi linea per linea e conservi solo quella che ti serve?
    Perchè dovrei allocare la memoria PRIMA di iniziare a leggere il file, non posso allocarla mentre legge riga per riga...
    C'è qualche altro modo? :master:
    Ci sono solo due cose infinite: l'universo e la stupidità umana. Ma non sono del tutto sicuro della prima

  8. #8
    Forse sto sbagliando ma per i puntatori a stringa non devo allocare la memoria PRIMA di assegnare ciascuna stringa? O si alloca autumaticamente quando dichiaro il ptr?
    Ci sono solo due cose infinite: l'universo e la stupidità umana. Ma non sono del tutto sicuro della prima

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ripeto ... tu stai mischiando C e C++ e questo non va bene.

    Facci vedere come leggi il file di testo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    L'ho scritto prima:

    while (!feof(fd)) //Fino alla fine del file, riga per riga
    {
    if( character != 0)
    {
    estrai sottostringa e memorizzala in *tPtr;
    Numero_Righe++;
    }
    }

    Supponiamo che il prototipo di funzione per estrarre una sottostringa dalla riga sia:

    string Trova_Nome(.....);

    come faccio a memorizzare le sottostringhe trovate (solo nelle righe in cui esiste 'character') in un puntatore a stringa?
    Ci sono solo due cose infinite: l'universo e la stupidità umana. Ma non sono del tutto sicuro della prima

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.