未初期化のポインタ変数に対するsizeofについて

Cで未初期化のポインタ変数を使ってsizeofで確保すべきバイトを求めているコードがあって、実体が無いポインタを使ったsizeofの意味が一瞬分からなかった。サンプルコードは次のような感じ。

#include 

typedef struct {
    int test1;
    int test2;
    char *test3;
} test;

int main(void)
{
    test *ptr;
    printf("%lu\n", sizeof(*ptr));
}

この場合のsizeof(*ptr)はそのポインタが指す実体 (今回で言えば構造体testのサイズ) が計算される。ここまでは普通だが、その場合のポインタの指す実体は存在しない場合でも前述の通りsizeofはコンパイル時に計算されるので問題ないようだ。

なので、例えば

test *t_ptr = (test *)malloc(sizeof(*t_ptr));

のように使用する場合でも全く問題ない。へーへー