Newsgroup: it.comp.lang.c
Titolo: vettore di int

ho una struttura, che devo per forza tenere cosi', del tipo:
struct prova {
	int *temp;
	float val;
	} PROVA;
struct element {
	PROVA vs;
	struct element *next;
	struct element *prec;
	} ELEMENT;
All'interco del programma devo inserire dei valori interi nel vettore
di interi, ma riesco solo ad inserirli nel primo elemento con:
ELEMENT *cella;
cella->vs.temp = valore_intero;
Come faccio poi ad inserire un valore nel secondo posto?
Non posso usare un array di lunghezza definita perche' non so quanti
valori devo inserire e non posso modificare la struttura della lista.
Ho provato con:
*(cella->vs.temp+1)= valore_intero;
ma non funziona.
Come si indirizza?
Grazie e ciao
james

 ma non funziona.
Come ti ho illustrato sopra funziona, ma l'array di interi e' proprio
solo
di una cella.
Se tu vuoi un'altra cella ti devi allocare lo spazio.
Es:
cella->next = (struct element *) malloc (sizeof (struct element));
cella->next->vs.temp = (int *) malloc (sizeof
(int)*numero_di_elementi_array_cella_2);
cella->next->vs.temp[0] = 5;
cella->next->vs.temp[1] = 3;
Se hai bisogno di implementare una lista queste strutture non sono le
piu' convenienti.
ti conviene usare una cosa del genere:
struct elemento {
    int *valori;
    struct elemento *prossimo;
    struct elemento *precedente;
}
Poi ti dovresti implementare una funzione di inserimento degli elementi.
Un buon libro consultato alla voce liste-strutture dati ti puo' essere
d'aiuto
Spero di essere stato esaustivo.
Ciao.

Entro in it.comp.lang.c e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto james :
#Come faccio poi ad inserire un valore nel secondo posto?
Sei sicuro di aver allocato lo spazio per gli elementi ?
La sintassi corretta e' la seguente (anche la tua, cmq, e' giusta) :
#include <stdio.h>
#include <stdlib.h>
typedef struct {
	         int * temp ;
                 float val ;
               } prova_t ;
main()
{
    prova_t p ;
    int i, v ;
    p.temp = malloc( 10 * sizeof( int ) ) ;
    for ( i = 0 ; i < 10 ; i++ )
    {
        scanf( "%d", &v ) ;
        *( p.temp + i ) = v ; /* oppure p.temp[i] = v */
    }
    for ( i = 0 ; i < 10 ; i++ )
        printf( "%d\n", *( p.temp + i ) ) ;
}
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

 Come faccio poi ad inserire un valore nel secondo posto?
Se ho capito bene
*((cella->vs.temp)+1)= valore_intero;
a causa della precedenza degli operatori.
EMG

Entro in it.comp.lang.c e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Nicola Leoni :
#cella = (struct element *) malloc (sizeof (struct element));
         ^^^^^^^^^^^^^^^^^^
#cella->vs.temp = (int *) malloc (sizeof (int)*numero_di_elementi_array);
                  ^^^^^^^
I cast non sono necessari. 


Entro in it.comp.lang.c e...cosa ti vedo ? sette lettini.
Su uno di essi c'era scritto Enrico Maria Giordano :
#Se ho capito bene
#
#*((cella->vs.temp)+1)= valore_intero;
#
#a causa della precedenza degli operatori.
No, scusami, *(a->b.c+1) e' equivalente a *((a->b.c)+1) in quanto gli
operatori ., -> e + hanno una precedenza, l'uno, rispettivamente, piu'
alta dell'altro.


 alta dell'altro.
Infatti non so neanche io perché abbia scritto quella cretinata... :-(
EMG