はじめての 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();
}

(追記) コードが アヤフヤだったので、書き直し。