为什么将指针的地址传递给C中的函数

时间:2013-01-18 05:06:53

标签: c pointers

我遇到像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的地址传递给函数?

3 个答案:

答案 0 :(得分:2)

这样strtok可以从中断的地方恢复。此版本的strtok是线程安全的(因为它使用您提供的指针而不是其他版本的内部指针)。

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

答案 1 :(得分:1)

因为strtokstrok_r时不可重入。这意味着您无法从多个线程安全地调用它。要解决此问题,函数必须在某处存储其状态,这可以通过将指针传递给指针来完成,这样strok_r就能够将传递的指针(这是另一个指针)的值修改为参数。

答案 2 :(得分:0)

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