- ベストアンサー
C言語での**pと*pについて
struct data { int data; int value; } int main(){ struct data *start = NULL, **p; p = &head; .... } という部分だけを抜き出したのですが、 このとき*pはどのような値になっているのでしょうか? いまいち良くわからなかったので、質問させていただきました。 どうか、お答えをよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
p = &start; でしたら、変数pに変数startのアドレスが格納されます。 この状態で、*pは変数startの内容と同じNULLを表現します。 ここで、 struct data *b; b = *p; とすれば、変数bにNULLが代入されます。
その他の回答 (2)
- arukamun
- ベストアンサー率35% (842/2394)
p = &start ; という事ですので まず、 struct data *start = NULL でdata型のポインタをNULLポインタに初期化していますね。 で、次に p = &start ; とやっているので、 nullポインタですのでメモリアドレスの0番地とかを参照してしまうのではないでしょうか。 参照した値をpに代入していますが、 struct **p ;と定義されています。 何をしたいのか全く解りません。 こういう事をやっているとシステムを破壊しかねませんので、コンパイル出来たとしても実行するのはやめた方が良さそうですね。
- arukamun
- ベストアンサー率35% (842/2394)
struct data { int data; int value; } int main(){ struct data *start = NULL, **p; p = &head; .... } headはどこで宣言されていますか。 mainでいきなり呼び出されているところを見ると外部変数で宣言されているのかもしれませんね。 とりあえずこれだけの情報では何とも言えません。 思うのですが、ポインタが解らないのであれば無理にポインタを使う必要は無いと思います。 最初は配列で良いと思いますよ。 プログラムという物はどれだけシンプルにわかりやすくコーディングするかというのもプログラムセンスの一つだと思います。
補足
間違いました…。すいません。 p = &head;ではなく p = &start; でした。申し訳ないです。
お礼
どのようになっているのか、ようやく分かった気がします。 的確なアドバイス、どうもありがとうございました。