【问题标题】:Why passing address of pointer to a function in C为什么将指针的地址传递给C中的函数
【发布时间】:2013-01-18 05:06:53
【问题描述】:

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

【问题讨论】:

  • 传递 intstruct 的地址的原因相同:因为 c 确实传递值。

标签: c pointers


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-01-09
        • 1970-01-01
        • 2019-07-26
        • 1970-01-01
        • 2021-12-27
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        相关资源
        最近更新 更多