|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2005
Messaggi: 118
|
[C] Reference di Puntatori?
Ciao a tutti!! Questo è il mio primo messaggio su questo forum.
Ho un piccolo problema in un mio listato in C. Cercherò di esporlo al meglio (anche se non è facilissimo per me Allora... nella funzione main() ho dichiarato 2 puntatori a double: double *punt1, *punt2; questi puntatori dovranno puntare a due zone di memoria (array) allocate tramite malloc(). L'allocamento di entrambe le zone deve però avvenire in un'unica funzione esterna alla main, per questo entrambi i puntatori dovranno essere passati alla funzione come parametri. In seguito, nella funzione main dovrò poter accedere a queste zone di memoria tramite i due puntatori punt1 e punt2. Questa è quella che dovrebbe essere la struttura del mio problema: Codice:
void funz(... p1, ... p2);
int main()
{
double *punt1, *punt2;
/* operazioni del main */
funz(...punt1, ...punt2);
/* operazioni con i puntatori punt1, punt2 */
free(punt1);
free(punt2);
return 0;
}
void funz(... p1, ... p2)
{
p1 = malloc(...);
p2 = malloc(...);
/* altre operazioni che utilizzano p1 e p2 */
}
Spero di essere stato abbastanza chiaro... Ultima modifica di DarkRevenge : 09-05-2005 alle 23:59. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Devi passare il puntatore al puntatore...
Codice:
void funz(double **p1, double **p2)
{
*p1 = (double *)malloc(sizeof(double)*N1);
*p2 = (double *)malloc(sizeof(double)*N2);
}
Codice:
double *p; /*è il puntatore al vettore all'inizio del vettore*/
double **pp; /*contiene il puntatore alla variabile p*/
facendo un cambio di tipo:
typedef double * vettore;
vettore p;
vetore *p;
void funz(vettore *p1, vettore*p2)
{
*p1 = (vettore)malloc(sizeof(double)*N1);
/*Avendo passato i puntatori in questo modo andrò a cambiare il valore delle
variabili puntate da p1 con il valore ritornato da malloc*/
*p2 = (vettore)malloc(sizeof(double)*N2);
}
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2005
Messaggi: 118
|
Grazie mille... sei stato chiarissimo
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: May 2005
Messaggi: 118
|
Altro problemino
Strutturando il problema come tu hai suggerito, come posso, nella funzione funz, leggere i valori da porre nella zona di memoria utilizzando la scanf? Ad esempio, ho questo codice: Codice:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef double* vettore;
void funz(vettore *p1);
int main()
{
vettore punt1;
funz(&punt1);
free(punt1);
return 0;
}
void funz(vettore *p1)
{
int i;
*p1 = (vettore)malloc(sizeof(double)*6);
for(i=0; i<5; i++)
// lettura dei valori mediante scanf
}
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La typedef era solo epr farti capire meglio...in realtà non è necessaria...anzi personalmente mi sembrerebbe tutto più chiaro senza...
Codice:
void funz(vettore *p1)
{
int i;
*p1 = (vettore)malloc(sizeof(double)*6);
for(i=0; i<5; i++)
scanf("%f", &(*p1[i])); /* oppure (*p1)+i */
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:34.



















