这个问题摆在了C大师面前:
在C语言中,可以按如下方式声明指针:
char (* p)[10];
…它基本上表示这个指针指向一个由10个字符组成的array.像这样声明一个指针的好处是,如果你试图将一个不同大小的数组指针分配给p,你会得到一个编译时错误.如果你试图将一个简单的字符指针的值分配给p,它也会给你一个编译时错误.我用gcc试过了,它似乎适用于ANSI、C89和C99.
在我看来,这样声明一个指针会非常有用--特别是在向函数传递指针时.通常,人们会这样编写这样一个函数的原型:
void foo(char * p, int plen);
如果需要特定大小的缓冲区,只需测试plen的值.但是,不能保证将p传递给您的人会在该缓冲区中真正为您提供plen有效的内存位置.你必须相信调用这个函数的人做了正确的事情.另一方面:
void foo(char (*p)[10]);
..会强制调用方为您提供指定大小的缓冲区.
这似乎非常有用,但我从未在我遇到的任何代码中看到过这样声明的指针.
我的问题是:人们为什么不这样声明指针呢?我没有看到明显的trap 吗?