相关疑难解决方法(0)

C指针:指向固定大小的数组

这个问题在那里向C大师们提出:

在C中,可以如下声明指针:

char (* p)[10];
Run Code Online (Sandbox Code Playgroud)

..这基本上表明这个指针指向一个10个字符的数组.声明这样的指针的巧妙之处在于,如果尝试将不同大小的数组指针分配给p,则会出现编译时错误.如果您尝试将简单char指针的值赋给p,它也会给出编译时错误.我用gcc尝试了这个,它似乎适用于ANSI,C89和C99.

在我看来,声明像这样的指针非常有用 - 特别是在将指针传递给函数时.通常,人们会编写这样一个函数的原型:

void foo(char * p, int plen);
Run Code Online (Sandbox Code Playgroud)

如果您期望具有特定大小的缓冲区,则只需测试plen的值.但是,您无法保证将p传递给您的人真的会在该缓冲区中为您提供有效的内存位置.你必须相信调用这个函数的人正在做正确的事情.另一方面:

void foo(char (*p)[10]);
Run Code Online (Sandbox Code Playgroud)

..会强制调用者为您提供指定大小的缓冲区.

这似乎非常有用,但我从未见过在我遇到过的任何代码中都声明了这样的指针.

我的问题是:人们有没有理由不宣布像这样的指针?我没有看到一些明显的陷阱吗?

c size pointers

107
推荐指数
2
解决办法
6万
查看次数

标签 统计

c ×1

pointers ×1

size ×1