| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  09-05-2005, 23:56 | #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. | 
|   |   | 
|  10-05-2005, 00:34 | #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);
} | 
|   |   | 
|  10-05-2005, 15:27 | #3 | 
| Member Iscritto dal: May 2005 
					Messaggi: 118
				 | 
		Grazie mille... sei stato chiarissimo     | 
|   |   | 
|  10-05-2005, 18:14 | #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
}        | 
|   |   | 
|  10-05-2005, 18:28 | #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: 09:35.









 
		 
		 
		 
		






 
  
 



 
                        
                        










