C言語のプログラムで以下のようなプログラムを見たのですが、「a -> next」の「 -> 」が何を指しているのかがわかりませんでした。
検索もしてみたのですが、"->"でヒットしてくれず困っています...
「a -> next」の場合、aとnextの関係はどのようなものなのでしょうか?
イメージがつかめません。
よろしくお願いいたします。
scanf("%d#,&data);
a = &listhead;
while(a -> next != NULL){
if(a -> next -> key == data)
break;
a = a -> next;
}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
->
は「アロー演算子」「矢印演算子」と呼ばれます。 a->next
とすると、ポインタ a
が指す構造体のフィールド next
を読み書きできます。 (*a).next
と同じ意味です。
投稿2015/07/21 08:02
総合スコア93
0
ベストアンサー
c
1scanf("%d#,&data); 2a = &listhead; 3while(a -> next != NULL){ 4 if(a -> next -> key == data) 5 break; 6 a = a -> next; 7} 8
ほかの方が説明しているように、a->nextはポインタ(a)が指す構造体のデータ(nextあるいはkey)を使うためのものです。
また、この処理はリストを辿って読み込んだ数値と同じ値を持ったデータを探すものです。
その為に、リストの先頭をポインタ(a)に入れて順次その値を探しています。
少なくともリストには,nextとkeyという変数を持った構造体がありnextはリストに入っている次の構造体のポインタが入っています。また、リストの終端のnextにはNULLが入っています。
投稿2015/07/21 11:26
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/21 12:24 編集
2015/07/21 13:30
0
オーソドックスなリスト構造でデータを検索しているプログラムですね。
listhead は多分、
struct list {
int key;
struct list *next;
};
とか定義されてるんでしょう。
「リスト構造」でググれば情報は見つかると思いますよ。
しかし、例のプログラムだと listhead.key はチェックしませんね。
それでいいんだろうか?
投稿2015/07/21 11:22
総合スコア51
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/21 12:25
2015/07/21 13:15
0
-> アロー演算子、構造体のポインタの時に使います。
struct a{
int next;
}
a.next と使いますが、 struct *A = &a; とした時
A->next
上記のソースコードの場合はlistheadのメンバーにnextがいると思います。
a = &listhead;
となっておりますので、 listhead.next と a->next は同じ場所を参照しています。
投稿2015/07/21 09:55
総合スコア1021
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。