ポインターの用途

アウト・パラメータ

C言語では関数の引数は値で渡される。だから、呼び出された関数が呼び出し元の関数のローカル変数の値を書き換えるには、呼び出し元の側で、その変数の記憶の場所を値として引っ張りだして渡してもらうしかない。

int i;
scanf("%d", &i); /* 標準入力から整数を i に読み込む */

配列のカーソルとして

char str[] = "hello";
char *p;
for (p = str; *p != '\0'; ++p)
  putchar(*p); /* str[0] から str[4] までを1文字ずつ出力する */

文字列を表す

最初の文字を指すことで文字列を表す。

const char *str = "hello";
puts(str); /* hello */
puts(str + 2); /* llo */

再帰的データ構造

struct List {
  int value;
  struct List *next; /* ポインタでないと循環定義になってしまう */
};

メモリの動的確保

char *copy = malloc( strlen(input) + 1 ); /* あらかじめ必要なサイズがわからない記憶領域 */
strcpy(copy, input);