yaotti's diary

Software is Eating the World

C言語のポインタ

ポインタ理解しようとがんばってます。
以下がなぜかエラー(bus error)になる。

#include <stdio.h>


main(int argc, char *argv[])
{
  int a[10];
  int *p;

  a[0] = 1;
  *p = 1;  /* pの指す先に1を指定、なはず */
  //p = 1; /* これはアドレスとして1を指定するのでおかしい */

  printf("%d\n%d\n", a[0], *p);
}

んで色々ためしたら、

int i = 1;
int *p;
p = &i;
*p = 2;

とやるとokっぽい。


これはint *pだけじゃpの指すさきが確保されてないってことなのかな。
だから確保されていない場所に格納しようとするとエラーがでると。
p = &i;
の部分で指す場所がiになり、iはint i = 1;で確保されているので格納できるようになる。


ポインタおもしろいな。