LogicalInSpace

ITについて

ポインターの疑問

2009-12-29 11:42:50 | C++
struct point
{
  int x;
  int *y;
};

void main()
{
  int a;
  int *b;

  a = 13;

  cout << a << endl;
  cout << &a << endl;

  b = &a;

  cout << *b << endl;
  cout << b << endl;


  point pt;

  pt.x = 21;
  pt.y = &a;

  cout << pt.x << endl;
  cout << *pt.y << endl;

  //point *ppt;

  //cout << ppt->x << endl;
  //cout << ppt->y << endl;
}

(表示結果)
13
0024FE80
13
0024FE80
21
13

私が2つ分からないことがあります。
int *b; と宣言した場合は、アドレスと値を宣言をしているのでしょうか?

int a; ならば、値を宣言をしていると思います。
アドレスは任意の場所なので、毎回に宣言している場合に変わると思います。

本文は b = &a; の後に b について表示しています。
しかし、前に表示しようとすると途中で落ちます。

int *b; の宣言の意味と、b = &a; の前に書くとなぜ落ちるのか?


  //point *ppt;

  //cout << ppt->x << endl;
  //cout << ppt->y << endl;

構造体のポインターのアロー演算子を使用しようと思いましたが(サンプルで作成しただけ)、ppt->x、ppt->y への値の代入方法が分かりません。


C言語は、業務では1度だけしか使ったことはありません。
少し複雑な構造体とポインターになるとどのように考えれば良いかが分からないという意味です。
どなたか、教えて頂けないでしょうか?
よろしくお願いいたします。