为什么在C语言中将指针地址传递给函数

3

我遇到了一些函数,比如strtok_s,这些函数需要传递指向指针的参数。

strtok_r(char *restrict str, const char *restrict sep, char **restrict lasts);

使用方法如下:
char *foo;
char *str = ...;
char *delimiter = ...;
strtok_r(str, delimiter, &foo);

想知道为什么要将指针foo的地址传递到函数中吗?

你传递一个 int 或者一个 struct 的地址的原因与传递其他参数的原因相同:因为 C 是按值传递的。 - dmckee --- ex-moderator kitten
3个回答

2

这是为了让 strtok 能够从上次停止的地方继续执行。这个版本的 strtok 是线程安全的(因为它使用你提供的指针而不是其他版本的内部指针)。

它将最后读取的标记的地址保存在一个 char * 中,所以你需要传递一个指向该指针的指针,以便它可以更改该值并将其返回给你。


1

因为 strtok 不是可重入的,而 strok_r 是可重入的。这意味着您不能从多个线程安全地调用它。为了解决这个问题,函数需要在某个地方存储其状态,可以通过传递指向指针的指针来实现,以便 strok_r 能够修改作为参数传递的指针(另一个指针)的值。


0

strtok_r(str, delimiter, &foo) 函数将其输出放入 foo 中,并需要指向它的指针,以便不仅替换(复制的)输入对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接