Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] Funzioni e Char con *

    Ciao, sto studiando da un po di tempo il c++ però non sono ancora riuscito a capire perchè i char utilizzano molto spesso questa sintassi:
    char *variabile;

    o la differenaza che ci sta tra dichiarare in una funzione l avriabili con * o senza, es:

    void funzione(char *s, char c)
    {
    while(*s)
    if (*s==c) return 1
    else s++;
    return 0;
    }

    io ho visto sul mio libro che utilizzza anche questo modo, ma quale differenza ci sta tra l'utilizzare l'una o l'altra?

    Non essendoci l'esempio di chiamata, presumo che sia così funzione(&var, stringa), e che tutte le volte che la frase non è uguale scorre il puntatore in avanti alla ricerca della seconda frase.

    Un'altra cosa che non ho capito è questa:
    supponendo che io ho la variabile prova=3; e richiamo queste operazioni:

    class prova;
    int var = prova;
    funzione(prova);

    la parola PROVA in questo caso ha il valore scritto di prova o vale 3? nel caso valga 3 come dovrei fare per dirgli che io voglio che si chiami PROVA?


  2. #2
    Utente di HTML.it L'avatar di Beziel
    Registrato dal
    Oct 2002
    Messaggi
    697
    guarda il thread sui puntatori e capirai

  3. #3
    Io ho già guardato i tread, ma non ho visto nessun articolo su quello, potresti darmi te il link?


  4. #4
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Quando dichiari la variabile con * significa che stai dichiarando un puntatore, in pratica si usa per passare la variabile per indirizzo, infatti come puoi ben vedere nell'esempio che hai postato, incrementa il contenuto di *s all'interno della funzione. Se l'avessi passata per valore, fuori dalla funzione ti saresti ritrovata la variabile senza modifica.
    Ovviamente, questa è solo una delle tantissime potenzialità dei puntatori, l'argomento non è semplice da potersi spiegare in 2 righe.

  5. #5
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614
    Originariamente inviato da Grunt
    Ovviamente, questa è solo una delle tantissime potenzialità dei puntatori, l'argomento non è semplice da potersi spiegare in 2 righe.
    Concordo.
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Forse intendeva la differenza tra char come carattere e char * come stringa!

    Se dichiari una variabile come char occupi la memoria per solo 1 byte:
    codice:
    char ch;
    ch = 'A';
    Se invece devi memorizzare una stringa, devi allocare la memoria per un insieme di caratteri, quindi un vettore.
    Per passare quella stringa alla funzione ne devi passare il puntatore.
    Esempio:
    codice:
    void f(char *str);
    
    void main() {
    // Dichiaro un array di caratteri per la stringa
        char s[30];
    // Chiamo la funzione
        f(s);
    }
    
    void f (char *str) {
        cout << str;
    }
    Noterai che per trattare le stringhe come array di caratteri hai molte limitazioni (come l'uso dello spazio in memoria e l'assegnamento tramite operatore =), quindi con il C++ è stata creata la classe string.

    Nel tuo codice:
    codice:
    void funzione(char *s, char c) 
    { 
    while(*s) 
    if (*s==c) return 1 
    else s++; 
    return 0; 
    }
    nell'istruzione "s++", NON incrementi il valore del carattere puntato da s, ma del suo puntatore!!

    Per ulteriori info chiedi sulla discussione sui puntatori

  7. #7
    Intendevo proprio questo, grazie

  8. #8
    in tutto questo non ti dimenticare dell esistenza della libreria string che non va mai gettata

    string prova="ciao";

  9. #9
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    nell'istruzione "s++", NON incrementi il valore del carattere puntato da s, ma del suo puntatore!!

    Per ulteriori info chiedi sulla discussione sui puntatori
    Non avevo letto bene la funzione.... credevo fosse il classico esempio degli interi che vengono incrementati all'interno delle funzioni. Chiedo scusa..... avevo letto..... (mi sa che stavo dormendo) *s++.

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.