Newsgroup: it.comp.lang.c
Titolo: Passaggio di un puntatore a sttruttura in una funzione

Nel main ho un puntatore ad una struttura chiamata "complesso", che contiene
due float;
io devo passare il puntatore alla funzione che deve allocare lo spazio del
puntatore, e poi allegnare i valori.
Il mio problema è che quando compilo mi dà sempre errore. Sicuramente è
questione di freccette (->) o di punto, ma non ho ancora capito di che si
tratta.
Sotto ho inserito il pezzo di programma incriminato...  GRAZIE
  struct complesso{
    float re;
    float im;
  };
void inizializza_master(struct complesso **c)
{
 int i, j;
 if(!(*c = (struct complesso *) malloc(sizeof(struct complesso)*N*N)))
  // alloca lo spazio in memoria per la matrice della parte  reale
 {
   printf("MEMORIA ESAURITA \n");
   exit (1);
 }
 else
 {
 for(i = 0; i < N; i++)
     for(j = 0; j < N; j++)
     {
        &c[j+(i*N)]->re=3;
       &c[j+(i*N)]->im=4;
     }
  }
}
main(int argc, char *argv[])
{
 struct complesso *master;
 inizializza_master(&master)
.........................

 due float;
Guarda un po' se ti va bene cosi'.
#include <stdio.h>
#include <malloc.h>
struct sNumeroComplesso
{
 float re;
 float im;
};
typedef struct sNumeroComplesso tNumeroComplesso;
////////////////////////////////////////////////////////////////////////////
///
//
tNumeroComplesso * Initialize(tNumeroComplesso *oNumeroComplesso,int
iNumberOfItems)
{
 int i;
 if (oNumeroComplesso == NULL && iNumberOfItems != 0)
 {
  oNumeroComplesso = (tNumeroComplesso *) malloc (sizeof (tNumeroComplesso)
* iNumberOfItems);
  if (oNumeroComplesso)
  {
   for (i=0;i<iNumberOfItems;i++)
   {
    oNumeroComplesso[i].re = (float)(3+i);
    oNumeroComplesso[i].im = (float)(4+i);
   }
  }
 }
 return oNumeroComplesso;
}
////////////////////////////////////////////////////////////////////////////
///
//
void main(int argc, char *argv[])
{
 tNumeroComplesso *oNumeroComplesso = NULL;
 int     iNumberOfItem = 4;
 int     x = 0;
 // iNumberOfItem protrebbe essere valorizzato usando argv[1] come argomento
..
 oNumeroComplesso = Initialize (oNumeroComplesso,iNumberOfItem);
 if (oNumeroComplesso)
 {
  for (x=0;x<iNumberOfItem;x++)
  {
   printf ("Parte reale       [%d] = %f\n",x,oNumeroComplesso[x].re);
   printf ("Parte immaginaria [%d] = %f\n",x,oNumeroComplesso[x].im);
   printf ("********************************\n");
  }
  free ((tNumeroComplesso *)oNumeroComplesso);
  oNumeroComplesso = NULL;
 }
}
Compiler:         VC 6.0 Service Pack 5
Enviromnent:     Winsozz 2K service pack 2
Byes
FusionFai

  if(!(*c = (struct complesso *) malloc(sizeof(struct complesso)*N*N)))
^^^^^^^^^
qui devi allocare lo spazio per un puntatore alla struttura e non per la
struttura!....Continuo a non capire tutta questa complicazione


void main(int argc, char *argv[])
non standard.
-- 
The Follet

Sotto ho inserito il pezzo di programma incriminato...  GRAZIE
<CODE>
#include <stdio.h>
#include <stdlib.h>
struct complesso {
       double re;
       double im;
};
void inizializza_master(struct complesso ***c, int m, int n)
{
     int i;
     *c = malloc(m * sizeof **c);
     for (i = 0; i < m; i++)
     {
         int j;
         (*c)[i] = malloc(n * sizeof(*(*c)[i]));
         for (j = 0; j < n; j++)
         {
             (*c)[i][j].re = (j+1)*(i-1);
             (*c)[i][j].im = (i*2)/(j+5);
         }
     }
}
void scrivi_master(struct complesso **c, int m, int n)
{
     int i, j;
     for (i = 0; i < m; i++)
     {
         for (j = 0; j < n; j++)
         {
             printf("(%6.2f,%6.2f); ", c[i][j]);
         }
         printf("\n");
     }
}
int main()
{
    struct complesso **mat;
    inizializza_master(&mat, 7, 4);
    scrivi_master(mat, 7, 4);
    getchar();
    return 0;
}
</CODE>
-- 
The Follet

struttura!....Continuo a non capire tutta questa complicazione
Continui a non capire cosa si vuole realmente: ovvero una
matrice di complessi.
-- 
The Follet

 ha scritto nel messaggio
news:3c0ee388...@news.tin.it...

wow...i'm sorry....errore di pigrizia...ho letto solo la prima parte del
codice...chiedo venia !