在一些手册页中,例如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 的对象的指针调用该函数。nmemb
size
compar
size
答案2
文档继续
该
memchr()
函数扫描 s 指向的内存区域的前 n 个字节,以查找 c 的第一个实例。
所以它告诉你的是,n
来自 指向的位置的字节s
被考虑