1
struct individual {
    int element[100];
    int rank;
} ;

struct population{
    individual ind[10];
    individual *ind_ptr;
} ;

population p1,*p1_ptr;

p1_ptr = &p1;
p1_ptr->ind_ptr = &(p1_ptr->ind[0]);
p1.ind[0].element[0] = 1;
p1_ptr->ind_ptr->element[0] = 1;

最後の 2 つのステートメントは同じことを表しています。なぜポインターを使用する必要があるのだろうか? インデックスへのポインタの利点はありますか? または、「。」の使用の好みはありますか?構造体の「->」?どうもありがとうございました。

コードを再度編集し、akash_sinha13134 と Jonathan Leffler によって指摘された間違いを修正しました。そして、mbratch のコメントに感謝します。どうもありがとうございました。

4

5 に答える 5

3

なぜポインターを使用する必要があるのだろうか?

あなたがする必要はありません、それはあなたの選択です。

インデックスへのポインタの利点はありますか?

最新のハードウェアでは、それらの間に違いはほとんどありません。ただし、古いハードウェアでは、インデックス作成時にポインター演算を実行する CPU サイクルを節約できるため、ポインターによってある程度の改善が見られました。

.s でのand->の使用の好みはありstructますか?

いいえ、好みはありません。p->xは の代替構文で(*p).xあり、コンパイラは両方の構成に対して同じ cod を生成します。

于 2013-09-06T12:59:32.503 に答える
1

上記のコードは C ではエラーを表示しますが (C++ ではありません)、coz 構造体tagnameはキーワードなしで使用されますstruct(たとえば、行内でpopulation p1,*p1_ptr;)。C で構造体にポインターを使用するかどうかは、純粋にあなたの選択です..ポインターを使用することもできますポインターを使用して構造体型関数から複数の値を返したい場合など、いくつかの場合に有利/役立ちます..しかし、ポインターを使用しないことを選択した場合、それと同じくらい簡単です...またdot(.) operatorとは(->) operator同じであり、優先順位はありません.. 唯一の違いは、それらの使用方法にあります..

于 2013-09-06T17:31:38.660 に答える
0

ポインターは自己完結型のエンティティです。ターゲット オブジェクトにアクセスするには、ポインターを逆参照するだけです。ポインターは直接絶対アクセスを実装します。

インデックスは自己完結型のエンティティではありません。インデックスだけを知っているものにはアクセスできません。インデックスに加えて、このインデックスを適用する配列を知る必要があります。配列がなければ、インデックス自体は役に立ちません。したがって、インデックスは相対アクセスを実装します。

ポインターとインデックスには、上記の 2 つの基本的な違いに起因する独自の長所と短所があります。ただし、この 2 つが交換可能である場合 (つまり、配列が常に事前にわかっている場合) は、個人的な好みに基づいてどちらかを選択できます。

于 2013-09-07T07:13:34.437 に答える
0
struct abcd aABCDStruct;
struct abcd * aPointerToABCDStruct;

ドット (.) は構造体変数に使用され、矢印/間接 (->) は構造体へのポインター変数に使用されます。

上記を知っていると仮定すると、
それ自体には違いはありませんstruct。リンクリストなど、使用しているデータ構造の場合、ポインタへのポインタを使用するとスムーズなシフトが容易になります。を使用してリストの次の変数に反復できますptr->next

于 2013-09-06T13:03:40.913 に答える
0

この例では、はい、両方ともind_ptr同じindメモリ位置を指しているため、ポインターを使用する必要はありません。

ただし、を使用ind_ptrして の別の配列を指すindividual場合、または実行時に母集団で使用している配列を変更する場合は、そこでポインターを使用する必要があり、これがこのアプローチが役立つ場所です (あなたの場合、そうではなく、混乱する可能性があります)。

s->fは実際には の単なるショートカットであり、は field を含む構造体へのポインタであるため(*s).f、そこに違いはありません。sf

于 2013-09-06T13:01:11.927 に答える