gpt4 book ai didi

c++ - 如何在 C 和 C++ 中迭代字符串数组?

转载 作者:行者123 更新时间:2023-11-28 02:24:54 25 4
gpt4 key购买 nike

我找到了在 main 函数中迭代 C 风格字符串数组的示例代码,代码工作正常,看起来像这样:

int _tmain(int argc, TCHAR* argv[])
{
for (TCHAR **iList = argv; *iList != NULL; ++iList)
{
wcout << *iList << endl;
}

cin.get();
return 0;
}

有一部分没看懂:

*iList != NULL

也许有人可以向我解释这部分?

最佳答案

C 风格字符串也称为空终止字符串。这只是意味着您将实际字符串的字符放在内存中,然后在所有这些字符之后,您就有了空字符。因此,当您想遍历 C 风格字符串中的所有字符时,您只需要从头开始,一直进行直到遇到空字符。

但是,在这个特定示例中,您处理的是一个字符串数组,而不仅仅是一个字符串。这意味着 argv 实际上指向内存中的一个位置,该位置是指针列表的开头。该列表中的每个指针都指向一个 C 风格的字符串。在这个指针数组的末尾,你有一个 NULL 指针,所以一旦你到达它,你就迭代了 argv 中的所有字符串。

让我们逐行看一下:

for (TCHAR **iList = argv; *iList != NULL; ++iList)

好吧,那太复杂了。我们先看第一个表达式:

TCHAR **iList = argv;

这声明了一个类型为 TCHAR** 的变量 iList。这意味着它是一个指向 TCHAR 的指针。它的值指向指针的位置,然后该指针指向 C 风格字符串的开头位置。

*iList != NULL;

这会获取 iList 指向的东西,并查看它是否是一个 NULL 指针。请记住 iList 指向指针,因此目标是继续检查 iList 指向的指针,直到找到一个实际上不指向任何东西的指针(这就是 NULL 表示),然后停止。

++iList

这只是意味着,每次执行 for 循环体时,您都会将 iList 的值加 1。因为 iList 是指向指针的指针,所以我们告诉 iList 指向它之前指向的指针之后的指针。

最后:

wcout << *iList << endl;

意思是把iList指向的东西(一个指针,因为iList指向指针)插入到wcout中,后跟一个换行符。这种情况下的插入运算符很聪明:因为 iList 指向的东西是一个指向字符的指针,它知道将它解释为 C 风格的字符串,所以跟随它指向的字符iList 指向的指针(是的,混淆),直到它找到一个空字符,并将所有这些字符打印到屏幕上。 endl 充当换行符和刷新 wcout 缓冲区的信号(将其直接打印到屏幕上,而不是仅将其保存在内存中)。

关于c++ - 如何在 C 和 C++ 中迭代字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31088789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com