迭代char **为什么这有效?

时间:2012-01-06 13:55:27

标签: c++ arrays pointers glib

我拿起了这段代码,我将其复制到我的程序中。这似乎是我通过char **迭代的一种新方式:

char** vArray;          // The array containing values

// Go throught properties
if(szKey == "KeyMgmt")
{
    vArray = (char**)g_value_get_boxed((GValue*)value);
    for( ; vArray && *vArray ; vArray++)  // Why does this work ?!
        pWpaKey->addKeyMgmt(std::string(*vArray));
}
else if(szKey == "Pairwise")
{
    // ...
}

它似乎像魅力一样工作,但我不明白为什么!假设vArray包含一个地址吗?并且* vArray“字符串”值。那么为什么当我“和”一个地址及其价值时,这给了我一个平等的呢?

2 个答案:

答案 0 :(得分:5)

vArray && *vArray相当于(vArray != NULL) && (*vArray != NULL)

首先检查指针vArray是否不是NULL,并且假设它不是NULL,检查它指向的指针不是NULL

答案 1 :(得分:3)

循环条件是

vArray && *vArray

这基本上是

的简写
(vArray != 0) && (*vArray != 0)

如果char**指针为非null并且指向非{null的char*,则为true。