对联机帮助页中方括号中文本的点的理解

对联机帮助页中方括号中文本的点的理解

在一些手册页中,例如https://man7.org/linux/man-pages/man3/memchr.3.html,我看到以下内容:

       void *memchr(const void s[.n], int c, size_t n);

例如在https://man7.org/linux/man-pages/man3/bsearch.3.html,

  void *bsearch(const void key[.size], const void base[.size * .nmemb],
                     size_t nmemb, size_t size,
                     int (*compar)(const void [.size], const void [.size]));

[.n][.nmemb]和术语的意义或解释是什么[.size]?还有点是什么意思?

答案1

它们表示数组或指向的对象(或组合)的大小。例如,在

void *memchr(const void s[.n], int c, size_t n);

s历史上会被写入const void * s,并指向一个n字节数组(或更多)。这提交引入这个符号指 VLA 语法,尽管在 C99 中相应的语法不使用前导点,并且要求在使用之前声明大小参数(据我所知,对于 无效void *)。

这种类型语法的一个有效示例是

int main(int argc, char * argv[argc + 1]);

声明bsearch更为复杂:key指向 size 的单个对象size,指向每个 size 的元素base数组,并且使用指向 size 的对象的指针调用该函数。nmembsizecomparsize

答案2

文档继续

memchr()函数扫描 s 指向的内存区域的前 n 个字节,以查找 c 的第一个实例。

所以它告诉你的是,n来自 指向的位置的字节s被考虑

相关内容