2009-06-22 7 views
0

le code follwing est exécuté avec succès ...doutes en chambre double pointeur en C

typedef struct _s 
{ 
    int *r; 

}s; 

void main() 
{ 
    s *u; 
    int y=1000; 
    u=malloc(sizeof(s)*8); 
    u->r=malloc(sizeof(int)*8); 
    u->r[5]=y; 

    printf("%d\n",u->r[5]); 
    getch(); 
} 

mais j'écrire le code follwing comme ci-dessus mais donne l'erreur .... j'utiliser la structure ..... peut pourquoi je connais la raison ...? si j'utilise double pointeur comme (... e ** h ...) produit une sortie correcte ... mais la raison est ...?

typedef struct _e 
{ 
    int r; 
}e; 

typedef struct _s 
{ 
    e *h; 

}s; 

void main() 
{ 
    s *u; 
    int y=1000; 
    u=malloc(sizeof(s)*8); 

    u->h=(e*)malloc(sizeof(e)*10); 
    u->h[1]=y; 
    printf("%d\n",u->h[1]); 
    getch(); 
} 

Répondre

1
u->h[1]=y; 

est une tentative d'attribuer un entier à un struct. Au lieu de cela, il devrait être

u->h[1].r=y; 

Et il en va de même pour printf().

4

Vous essayez d'attribuer un entier à un struct:

int y=1000; 
u->h[1]=y; 

Probablement vous vouliez utiliser u->h[1].r (et dans l'instruction d'impression suivante):

u->h[1].r=y; 
printf("%d\n",u->h[1].r); 

Si h serait déclarée comme e** il ne donne aucune erreur car u->h[1] est alors de type e* et l'int y peut être implicitement converti en un pointeur dans l'affectation. Mais cela ne ferait vraiment rien d'utile.

0

Tout d'abord, pourquoi faites-vous cela? Cela n'a aucun sens d'avoir des noms à une lettre, ni des structures avec un seul élément. S est un type représentant une structure contenant un seul pointeur-à-e, qui est à son tour un type contenant un seul int.

u est un pointeur sur un s, et donc u-> h [1] est de type e. Vous ne pouvez pas affecter un int à un e. La seule raison pour laquelle cela semble fonctionner avec ** h est que vous attribuez un int à un pointeur, ce qui est possible mais presque toujours faux.

1

Dans la ligne

u->h[1]=y; 

le côté gauche est une structure, et non pas un nombre entier. Ecrivez

u->h[1].r=y; 

et vous affectez y au champ r de la structure, ce que vous avez l'intention de faire.