Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: c puntatori o variabli

  1. #1
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505

    c puntatori o variabli

    Sto leggendo le basi del c e non capisco perche abbiano creato sti stramaledetti puntatori.a questo punto mi chiedo.

    quando usare i puntatori e quando le variablii ...ciao e grazie
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  2. #2
    Sono due cose diverse.

    Un puntatore contiene l'indirizzo della variabile localizzata in memoria.

    A cosa servono?
    A tante cose, per esempio a passare i parametri di una funzione per riferimento.

    bye

  3. #3
    Beh... da spiegare è un pò difficile ma ci provo e spero di non sbagliare.

    Una variabile è l'allocazione della memoria per l'inserimento di dati:

    char prova[5];

    In questo modo alla variabile char prova sono riservati 5 bytes in memoria.
    Con i puntatori, punti una variabile ad un indirizzo di memoria:

    char *prova2 = &prova;

    In questo modo prova2 è puntato a prova, e modificando prova2 modifichi anche prova, proprio perchè l'indirizzo di memoria è uguale.
    Ora, per allocare uno spazio di memoria ad un puntatore si usa malloc():

    char *prova = (char *)malloc(5);

    In questo modo puoi usare il puntatore come una variabile, perchè gli è stata allocata la memoria di 5 bytes.

    void modifica(char *prova) {
    strcpy(prova, "prova");
    }

    int main(void) {
    char prova[5];
    strcpy(prova, "asd");
    modifica(&prova);
    }

    In questo modo modifica quella stessa variabile prova da "asd" a "prova", poichè con &prova gli hai passato l'indirizzo di memoria.
    Se invece facevi modifica(char prova[]) e facevi modifica(prova) copiavi la variabile prova del main() e la passavi alla funziona come nuova variabile ma con contenuto uguale, quindi la modifica sarebbe avvenuta solo all'interno della funzione e non avrebbe modificato la variabile originale.

    Spero di essere stao chiaro

  4. #4
    In questo modo modifica quella stessa variabile prova da "asd" a "prova", poichè con &prova gli hai passato l'indirizzo di memoria.
    Se invece facevi modifica(char prova[]) e facevi modifica(prova) copiavi la variabile prova del main() e la passavi alla funziona come nuova variabile ma con contenuto uguale, quindi la modifica sarebbe avvenuta solo all'interno della funzione e non avrebbe modificato la variabile originale.

    Spero di essere stao chiaro [/B]
    Non esattamente, essendo prova un array.
    Quindi anche facendo:

    codice:
    modifica (prova);
    Gli passi lostesso l'indirizzo di quella variabile.

    bye

  5. #5
    Si hai ragione scusa... un attimo di confusione

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Credo che un puntatore sia a tutti gli effetti una variabile.

    Prova fare una ricerca, è un argomento già trattato diverse volte!

  7. #7
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    Non esattamente, essendo prova un array.
    Quindi anche facendo:

    codice:
    modifica (prova);
    Gli passi lostesso l'indirizzo di quella variabile.

    Lo puoi passare unicamente in quel modo, in quanto un vettore di char è equivalente (con alcune differenze) ad un char*

    La differenza è che un array punta ad un area di memoria in modo "costante", cioè non puoi modificare l'area di memoria a cui punta.
    Nel caso dei puntatori questi possono modificare l'indirizzo di memoria a cui puntano in fase di run-time
    Linux user number 403381

    Stop TCPA!

  8. #8
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    grazie per aver risposto ma, in pratica se i volessi realizzare un programma in cui mi interessa solamente passare varibaili per valore basterebbe usare le semplici variabili e non i puntatori????

    poi scriver *variabile equivale a dire che c'è uno spazio in memoria a cui io posso accedere chiamandolo variabile?

    se poi metto *variabile=&variabile2 dove variabile 2 è una variabile
    indico che puntando su variabile devo considerare il valore di variabile 2???

    ciao e grazie
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  9. #9
    se nei programmi che costruisci ti interessa la pesantezza e il tempo di esecuzione, e' sicuramente + efficiente passare un puntatore che una struttura vera e propria!

  10. #10
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    quidni passare il puntatore allegerisce il programma
    questo è undo dei motivi per cui si usano....
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


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 © 2024 vBulletin Solutions, Inc. All rights reserved.