9
C指针:指向固定大小的数组
这个问题出现在C语言专家那里: 在C中,可以如下声明一个指针: char (* p)[10]; ..基本上表明该指针指向10个字符的数组。像这样声明一个指针的整洁之处在于,如果尝试为p分配一个大小不同的数组的指针,则会出现编译时错误。如果您尝试将简单的char指针的值分配给p,也会给您带来编译时错误。我在gcc上尝试过,似乎可以在ANSI,C89和C99上使用。 在我看来,像这样声明一个指针将非常有用-特别是在将指针传递给函数时。通常,人们会这样写这样的函数原型: void foo(char * p, int plen); 如果期望使用特定大小的缓冲区,则只需测试plen的值。但是,不能保证将p传递给您的人确实会在该缓冲区中为您提供有效的内存位置。您必须相信调用此函数的人在做正确的事情。另一方面: void foo(char (*p)[10]); ..将强制调用方为您提供指定大小的缓冲区。 这似乎很有用,但我从未在任何遇到过的代码中看到过像这样声明过的指针。 我的问题是:人们为什么不声明这样的指针有什么理由?我没有看到明显的陷阱吗?