配列への真のポインター (これまで実際には対処されていません) は、ほとんどのコンテキストで配列が最初の要素へのポインターに減衰するため、一般的ではありません。また、配列型を割り当てることができないため、他のポインター型に比べて実用的ではありません。その点では、関数ポインタに似ています。
実際の最大の違いは、関数の呼び出しや戻りなど、ポインターの減衰によって配列が失われる状況で、配列のサイズが保持されるという事実から生じます。たとえば、次のコードを見てください
void function(char (*array)[10]) {
for(size_t i = 0; i < sizeof(*a); i++);
(*a)[i] = i;
}
...
char a[10];
function(&a);
この sizeof の適用を可能にするだけでなく (サイズはパラメーターの一部として知られているため、これはあまり役に立ちません)、これにより、渡す引数の正確なサイズが型の一部として強制さfunction(char array[10])
れ[static 10]
ます。戻るには、通常とは異なる構文があります。
char (*function(void))[10] {
static char array[10];
// do something with our static array
return &array;
}
char (*a)[10] = function();
// or even
char (*b)[sizeof(*function())] = function();
私は実際にこのアプリケーションに出くわしたことはないと思いますが、少なくとも可能です (そして合法です)。