ポインタを利用するときは、必ずその値が指し示すアドレスに値がある必要がある。
int a; int *p; a = *p; //ポインタがなにもないアドレスを指し示している為エラー
プログラム内で、どこも指し示していないことを明示する場合に使う。
NULLポインタはどの型のポインタにも格納できる。
int *p = NULL;
ポインタpが有効かどうかを調べるには、論理演算を使って調べることができる。
#include <stdio.h> #include <string.h> int main(void) { char s[] = "test aaa"; char c = 'd'; //ダブルクォートで囲むとエラーになる char *p = NULL; printf("文字列 %s の中に文字 %c ", s, c); p = strchr(s, c); if (!p) { printf("なし\n"); } else { printf("あり\n"); } //出力結果は「なし」になる。 }
strchrの関数は以下の動きをする
strの中からchrを検索して最初に発見した文字以降のアドレスを返す。文字を発見できなかった場合はNULL(\0)を返す。
尚、一般的には検索する文字はint型にcastする。