Newsgroup: it.comp.lang.c
Titolo: *,**,& quali differenze ?

Salve,
mi spiegate quali differenze ci sono tra i simboli in oggetto ?
So che l'asterisco indica il puntatore all'area di memoria 
dove viene contenuto il valore di una variabile ma il doppio
asterisco ? E la e commerciale & ?
Grazie
Giuseppe

 wrote in message
news:aski7i$s6ivv$1...@ID-154800.news.dfncis.de...


 memoria del puntatore alla variabile)
qual è l'utilità in un codice di puntare doppio ?
Grazie della risposta Luca.
Ciao
Giuseppe

 wrote in message
news:aski7i$s6ivv$1...@ID-154800.news.dfncis.de...

** penso sia un puntatore a puntatore, non so quanto legale possa essere
(non lo uso mai)...
& posto davanti all'indicatore di una variabile ne da' l'indirizzo.
ESEMPIO
int main()
{
    int a = 6;
    int *punt = NULL;
    punt = &a;
}
in questo modo abbiamo fatto si' che punt sia un puntatore ad a passandogli
l'indirizzo.
--
Napolux
http://ifsk.too.it
http://napolux.supereva.it

 var.
Sono arrivato prima io! :)



Non siamo a 'chi vuol essere milionario'
vai su it.quiz.gerry.scotti  :)

 qual è l'utilità in un codice di puntare doppio ?
Ci sono diversi casi in cui può servire, lo vedrai con l'esperienza (anche
se capita di rado di utilizzare **)

un manuale sul C base no???


 un manuale sul C base no???
Pensare prima di scrivere no ??
Giuseppe



Aggiungo che il simbolo & è anche l'operatore unario di AND bit a bit
=)

 ha scritto:

Formalmente  *   e`  l'operatore  di  dereferenziamento,   mentre  &  e`
l'operatore address-of. Inoltre * puo` essere usato in una dichiarazione
per indicare il tipo "puntatore a".
"puntatore a" int
int *a;
"puntatore a" "puntatore a" int
int **a;
Il  "doppio asterisco"  si usa  in  modo analogo  al puntatore  normale.
L'utilizzo principale dei puntatori e` nel passaggio di argomenti ad una
funzione per simulare un passaggio per reference. I.e. se voglio passare
una variabile  ad una funzione  e voglio che  le modifiche fatte  a tale
variabile siano visibile anche all'esterno uso un puntatore:
void inc(int a) {
        a++;
        /* Sbagliato, modifico la copia locale */
}
void inc(int *a) {
        (*a)++;
        /* Occhio alle parentesi. */
}
E  se nella  funzione  volessi modicare  un puntatore  che  mi e`  stato
passato? Semplice: uso un puntatore a puntatore:
void alloc(void **p, size_t size) {
        void *tmp;
        tmp = malloc(size);
        *p = tmp;
}
Un'altro possibile uso  per il puntatore a puntatore e`  la creazione di
matrici dinamiche:
int **new_matrix(int row, int col) {
        int **p;
        int i;
        p = malloc(sizeof(int *) * row);
        for (i = 0; i < row; i++)
                p[i] = malloc(sizeof(int) * col);
        return p;
}
In  questo caso  la matrice  viene creata  come array  di puntatori  che
rappresentano le  varie righe e  che puntano (appunto) agli  elementi di
quella riga.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"It is more complicated than you think"
                -- The Eighth Networking Truth from RFC 1925

On Wed, 04 Dec 2002 14:21:41 GMT, Loganino <chied...@capito.ok>
wrote:

Dopo questa cazzata che ho scritto posso anche mettermi con la testa
sotto terra :) Loganino sei uno scemooooo, operatore unario...bah :D
(è binario sorry, troppa erbapipa)