2010-11-25 12 views
0

私は最初の2人の市民は、ポインタを使用して、2009年に一緒に結婚していることを示したいと思います(のはcitiensは、アンソニー・ホプキンスとジョディ・フォスターあるとしましょう)C.でStrcture(ポインタの使用状況との関係を示すために)

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]; 
+0

最初の2つのエントリ(People [0]とPeople [1])に関するブール値の回答をしたいのですか、最初の2つのmaried市民エントリを探したいですか? – terminus

+1

何が問題なのですか?コンパイラエラーが発生していますか? –

+1

同じ性別の結婚を許可しますか? – pmg

答えて

1

あなたは意味、ちょうど:

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

私は質問を誤解していますか? '。'構造体の中のメンバを参照するために使用されます(または構造体へのポインタを持つ場合は - >)、 '&'はそのシンボルへのポインタです。

おそらくとしてもそれを宣言したいと思う:あなたは純粋なC++コンパイラを持っているならば、あなたはできますが(暗黙として「構造体」がC++ではなくCでサポートされていたまま

struct citizen *pSpouse; 

主にCコードのために使用します。そのような奇妙なことは、エラーが発生したときにはエラーとして報告されません)。

追加:

レコード0と1が結婚しているかどうかをテストするには:

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

は、ポインタの値を比較すると、常に彼らは同じものを指しているかどうかを確認するために有効な方法です。

+0

私は彼らが結婚していることを示すためにポインタとマークポインタを使用する必要があります。私は何をしようとしているのか上に書きました。 –

+0

あなたは彼らが結婚しているかどうかをテストできるようにしたいですか?私はそれがあれば私の答えを修正しました。 – Tommy

+0

はい、正確です!どうもありがとう。時には新しい初心者が説明したり、適切な言葉で尋ねたりするのは少し難しいですが、あなたはそれを持っています:)もう一度ありがとうございます。 –

1
People[0].pSpouse = &People[1]; 
People[0].iYearOfMarriage = 2009; 

People[1].pSpouse = &People[0]; 
People[1].iYearOfMarriage = 2009; 
+0

ありがとうございます。どうやってやったの? –

1

としては、前に指摘:Cコンパイラの使用を のtypedef構造体市民{ ...}市民を使用する場合 1>。

および allPeople [0] .spouse = & allPeople [1];

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