はじめての C
(続き)
NULL は、たいていの 一般的な null ポインタ変数としての 目的に 適っています。
データオブジェクトポインタとして 用いることで、プログラムでは、宣言された - declare - (または 割り当てられている - allocate -) データを含まない オブジェクトを 指し示します。
216 ページで 触れたように、このマクロは、0, 0L または (void *)0 の どれかを 定義 - definition - として もつことが できます。
最後の 定義ですと、他の オブジェクトポインタとも 一致します。
ただし、関数へのポインタ - function pointer -とだけは 矛盾してしまいます。
というのも、次のようには 書けないからです。
int (*pfun)(void) = NULL; /* WRONG */
この変換 - translation - だと、たぶん エラーが でて - complain - しまいます。この表記された型 - expression type - は、初期値として セット - initialize - させたい データオブジェクトと 一致しません。(p220)
(注) 関数へのポインタ
tutorial には、引数を もたず、返り値のない 例が あげられている。
main()
{
void (*pf)(void); /* 関数のポインタの宣言 */
void f(void)
{
printf("Hello, world.\n");
}
/* pf に 値をセット */
pf = f;
/* 呼び出しは 次のどちらでも OK */
(*pf)();
pf();
}
(追記) コードが アヤフヤだったので、書き直し。