• ベストアンサー

C言語での**pと*pについて

struct data { int data; int value; } int main(){ struct data *start = NULL, **p; p = &head; .... } という部分だけを抜き出したのですが、 このとき*pはどのような値になっているのでしょうか? いまいち良くわからなかったので、質問させていただきました。 どうか、お答えをよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.3

p = &start; でしたら、変数pに変数startのアドレスが格納されます。 この状態で、*pは変数startの内容と同じNULLを表現します。 ここで、 struct data *b; b = *p; とすれば、変数bにNULLが代入されます。

ryo-3
質問者

お礼

どのようになっているのか、ようやく分かった気がします。 的確なアドバイス、どうもありがとうございました。

その他の回答 (2)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

p = &start ; という事ですので まず、 struct data *start = NULL でdata型のポインタをNULLポインタに初期化していますね。 で、次に p = &start ; とやっているので、 nullポインタですのでメモリアドレスの0番地とかを参照してしまうのではないでしょうか。 参照した値をpに代入していますが、 struct **p ;と定義されています。 何をしたいのか全く解りません。 こういう事をやっているとシステムを破壊しかねませんので、コンパイル出来たとしても実行するのはやめた方が良さそうですね。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

struct data {   int data;   int value; } int main(){   struct data *start = NULL, **p;   p = &head;   .... } headはどこで宣言されていますか。 mainでいきなり呼び出されているところを見ると外部変数で宣言されているのかもしれませんね。 とりあえずこれだけの情報では何とも言えません。 思うのですが、ポインタが解らないのであれば無理にポインタを使う必要は無いと思います。 最初は配列で良いと思いますよ。 プログラムという物はどれだけシンプルにわかりやすくコーディングするかというのもプログラムセンスの一つだと思います。

ryo-3
質問者

補足

間違いました…。すいません。 p = &head;ではなく p = &start; でした。申し訳ないです。

関連するQ&A