Strcture in C. (Использование указателей и показать отношения) - PullRequest
0 голосов
/ 25 ноября 2010

Я хочу показать, что первые два гражданина поженились вместе в 2009 году, используя указатели (скажем, Citiens - это Энтони Хопкинс и Джоди Фостер)

struct citizen
{
char sSSC[12];
char sFamilyName[16];
char sNames[24];
char cGender; //men ='m', women='w'
citizen*pSpouse; //Null if not married
int iYearOfMarriage;

}
citizen People[100000];

Ответы [ 3 ]

1 голос
/ 25 ноября 2010
People[0].pSpouse = &People[1];
People[0].iYearOfMarriage = 2009; 

People[1].pSpouse = &People[0];
People[1].iYearOfMarriage = 2009; 
1 голос
/ 25 ноября 2010

Как указано ранее: 1> Если вы используете компилятор c typedef struct Citizen { ... } гражданин;

И allPeople [0] .spouse = & allPeople [1];

allPeople [1] .spouse = & allPeople [0];

1 голос
/ 25 ноября 2010

Вы имеете в виду, просто:

People[ANTHONY_HOPKINS].pSpouse = &People[JODIE_FOSTER];
People[JODIE_FOSTER].pSpouse = &People[ANTHONY_HOPKINS];
People[ANTHONY_HOPKINS].iYearOfMarriage = 
People[JODIE_FOSTER].iYearOfMarriage = 2009;

Или я неправильно понял вопрос? '' используется для ссылки на члены в структуре (или -> если у вас есть указатель на структуру), '&' - указатель на этот символ.

Возможно, вы также захотите объявить это как:

struct citizen *pSpouse;

Оставление «struct» как неявного поддерживается в C ++, но не в C (хотя, если у вас есть компилятор pure-C ++, вы можете в основном использовать его для кода C, при этом странные вещи, подобные этому, не сообщаются как ошибка, когда так и должно быть).

Дополнительно:

Чтобы проверить, женаты ли записи 0 и 1:

if(People[0].pSpouse == &People[1])
{
    printf("They're married!\n");
}

Сравнение значений указателей всегда является правильным способом проверить, указывают ли они на одно и то же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...