char** 来处理字符串?

标签 c string pointers char

当我遇到 char** 时我很困惑,真的有必要处理字符串吗?
例如:

double strtod(const char *nptr,char **endptr);

如果endptr不为NULL,则指向停止扫描的字符的指针将存储在endptr指向的位置。 ---MSDN
这相当复杂,为什么不直接将指向字符的指针复制到endptr呢?正如我所想,调用后的所有计算都可以通过将指针的值传递给 endptr 来实现。
真的需要char**吗?

最佳答案

C 中的参数按值传递。如果您希望函数的调用者看到对传递给函数的参数所做的更改,则需要将参数的地址传递给函数。这就是传递 char** 的原因。调用者有一个 char* 类型的变量并传递其地址。如果函数中发生更改,调用者可以看到该更改。

例如:

void set_int(int i) { i = 4; }

/* Caller */
int x = 7;
set_int(x);
/* 'x' is still 7 */

void really_set_int(int* i) { *i = 4; }

/* Caller */
int x = 7;
really_set_int(&x);
/* 'x' is now 4 */

对于 char* 类型的变量具有相同的行为。如果函数需要更改 char*指向(而不是其内容),它需要 char* 的地址,即类型为 char**

关于char** 来处理字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13098037/

相关文章:

string - 在bash中获取多个空格后的字符串

string - Borland C++ Builder 6 和字符串连接

C++:在指针集中查找

c++ - 在 C++ 中创建对象的函数

c - 初始化指向字符串数组的指针

c - 无法从 Ubuntu 12.04 命令行在 CC2538dk 板上上传代码

使用用户输入创建链表会在 CodeBlocks 上返回错误 0xC0000005

c - 这是什么意思 : struct word *nowhead = head[string[start - 'a' ]];

c - 通过分隔符分割字符串

php - 如何在 PHP 中替换 Microsoft 编码的引号