ポインタを学ぶ

ポインタは変数に & を付ける。
http://codepad.org/nS9c496d

#include<stdio.h>

int main(void){
  int n;
  n=1;
  printf("%d : %p\n", n, &n);
  return 0;
}
1 : 0xbfad0d9c


ポインタ変数は型に*を付けて宣言する。 int* n とかでポインタ変数 n を宣言する。 *n でそのポインタの示す値が取れる。
ポインタ変数 n を宣言して、変数 m のポインタを n に入れる。
http://codepad.org/V10QTNG9

#include<stdio.h>

int main(void){
  int* n;
  int m=1;
  n = &m;
  printf("%d : %p\n", *n, n);
  printf("%d : %p\n", m, &m);
  return 0;
}
1 : 0xbfa08cc8
1 : 0xbfa08cc8


こんなふうにやっちゃだめ。
ポインタに1を代入しようとして、怒られる。
http://codepad.org/9KWY8D8R

#include<stdio.h>

int main(void){
  int* n;
  n = 1;
  printf("%d : %p\n", *n, n);
  return 0;
}
Segmentation fault


こんなのもだめ。
初期化されていないポインタの示す値に1を代入しようとして、怒られる。
NullPointerExceptionみたいな感じかな。
http://codepad.org/QdNcxA5X

#include<stdio.h>

int main(void){
  int* n;
  *n = 1;
  printf("%d : %p\n", *n, n);
  return 0;
}
Segmentation fault