2010-04-22 5 views
1

J'ai un struct défini par la structure comme suit (les noms sont différents)C Pointer Question: & (* struct-> struct)

struct str1 
{ 
    int field1; 
    struct str2; 
} 

et j'ai *str1 dans une fonction. J'aimerais obtenir un pointeur vers str2.

J'ai donc essayé &(str1->str2) et j'espérais que cela retournerait un pointeur sur str2. Est-ce incorrect? Cela ne semble pas fonctionner. Comment est-ce que j'obtiendrais un pointeur à str2 si donné un pointeur à str1?

+1

fonctionne bien pour moi; obtenez-vous une erreur de compilation? Pouvons-nous le voir? – tzaman

+0

& (str1-> str2) est correct. Pourquoi dites-vous que ça ne marche pas? – Jay

+6

Votre déclaration "struct str1" est mauvaise. Il ne spécifie pas de variable dans la déclaration "struct str2" (par exemple, "struct str2 str2;"). Pouvons-nous voir le code actuel? –

Répondre

0

Si vous avez un pointeur vers STR1, vous devrez peut-être faire:

& (* (str1) .str2)

pas vraiment sûr à ce sujet, mais l'essayer, je n'ai pas C compilateur à portée de main.

+2

& (* (str1) .str2) est équivalent à & (str1-> str2) :) – LukeN

4

Si p est un Ponter à un objet de type struct str1, puis &p->str2 donnera votre pointeur à ses membres str2 (en supposant qu'il a str2 membre).

"Ne semble pas fonctionner" n'est pas une description significative d'un problème. Vos exemples semblent suspects cependant. Le struct str2 à l'intérieur struct str1 n'a aucun sens. Qu'est ce que c'est censé être? Une déclaration forward d'un type struct? Et votre pointeur est-il vraiment nommé str1? Identique à la balise struct?

1

Votre solution doit être correcte. str1-> str2 vous dirige vers la structure et en prenant son adresse, vous obtiendrez un pointeur vers cette valeur.

Qu'est-ce que votre débogueur vous dit? Peut-être que votre pointeur str1 est une poubelle?

-1

Vous pouvez créer un pointeur vers une autre structure comme ci-dessous,

#include<stdio.h> 

struct emp_1 { 
    int id; 
    char *name; 
}; 

struct company { 
    int id; 
    char *name; 
    struct emp_1 emp; 
}; 

void main(void) 
{ 
    struct company company; 
    struct emp_1 *emp = (struct emp_1 *)&company; 

    company.id = 100; 
    company.name = "Payoda"; 
    emp -> id = 100; 
    emp -> name = "Mohanraj"; 

    printf("emp id is : %d \n", emp -> id); 
    printf("emp name is : %s \n", emp -> name); 
} 
+0

-1: Vous n'accédez pas du tout au membre 'emp' de l'extrait. – jpalecek