A volte vedo scritto **v (al posto di v c'è qualunque lettera o parola) cosa significa?
Io so che *v è un puntatore ma **v cos'è?
Grazie e scusate per la banalità della domanda.
A volte vedo scritto **v (al posto di v c'è qualunque lettera o parola) cosa significa?
Io so che *v è un puntatore ma **v cos'è?
Grazie e scusate per la banalità della domanda.
è molto che non sviluppo in c... ma mi sembre di ricordare che il doppio star davanti ad una varibile **a, sta a significare che è un puntatore al puntatore di a. In sostanza doppio puntatore ad a
![]()
Esatto.
Puntatore a puntatore a ...
Ma questa struttura può essere ricorsiva?
*****a
Puntatore al puntatore al puntatore al puntatore di a?
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Non si parla in questo caso di ricorsivita' ... non c'entra ...
Sì ... puoi scrivere un puntatore a puntatore a puntatore ... ma dopo un certo livello (il secondo o il terzo) non ha piu' utilità pratica ...
Altro dubbio sempre sui puntatori.
Allora se ho una funziona così dichiarata:
void funzione(int **v, int *dim)
e dal main la chiamo così:
funzione(&v, &dim);
cosa significa? che gli ho passato la locazione di memoria a cui puntano v e dim?
ma se v e dim sono due puntatori nn bastava scrivere
funzione(v, dim); per passare la locazione?
Oppure v e dim sono le locazioni di memoria a cui puntano e invece &v e &dim sono le locazioni di memoria dei puntatori stessi?
Ma come sono dichiarati nel programma v e dim ?
Perche', secondo come sono dichiarati, la risposta cambia ...
Allora ti allego il codice:
#include <stdio.h>
#include <stdlib.h>
main()
{
int *pv;
int pnum;
creaVett(&pv, &pnum);
}
void creaVett(int** pv, int* pnum)
{
int i;
printf("Quanti valori? ");
scanf("%d", pnum);
*pv = (int*) malloc(*pnum * sizeof(int));
for (i=0; i< *pnum; i++){
printf("v[%d] = ", i);scanf("%d", *pv+i);
}
In questo caso, i passaggi sono corretti.Originariamente inviato da Linusss
Allora ti allego il codice:
#include <stdio.h>
#include <stdlib.h>
main()
{
int *pv;
int pnum;
creaVett(&pv, &pnum);
}
void creaVett(int** pv, int* pnum)
{
int i;
printf("Quanti valori? ");
scanf("%d", pnum);
*pv = (int*) malloc(*pnum * sizeof(int));
for (i=0; i< *pnum; i++){
printf("v[%d] = ", i);scanf("%d", *pv+i);
}
Quindi ...
significa che stai passando le locazioni di memoria a cui punta il puntatore pv e la locazione di memoria della variabile pnum.cosa significa? che gli ho passato la locazione di memoria a cui puntano v e dim?
Attenzione, stai facendo un errore grave. Stai confondendo i parametri formali con quelli attuali.ma se v e dim sono due puntatori nn bastava scrivere
funzione(v, dim); per passare la locazione?
v e dim indicano solamente al compilatore che funzione accettera' due puntatori come parametri (parametri formali).
Il secondo parametro non puo' essere pnum perche' pnum non e' un puntatore ma un intero. Devi quindi passare il puntatore all'intero tramite &pnum. In questo modo la scanf potra' operare con l'indirizzo di pnum.
Il primo parametro deve essere un puntatore a puntatore perche' deve essere utilizzato dalla malloc (che restituisce un valore da scrivere in un puntatore). Ma questa non potrebbe scrivere in un puntatore se non ne conosce l'indirizzo e quindi si rende necessario il fatto che il primo parametro sia un puntatore ad un puntatore.
E la chiamata deve prevedere il fatto di usare il puntatore ad un puntatore. Il puntatore pv ce l'hai e per passarne l'indirizzo devi scrivere &pv.
So che puo' apparire un discorso contorto e difficile da capire ...
ma ti abituerai ...