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

mor*_*ndg 0 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")
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

它看起来像一个魅力,但我不明白为什么!假设vArray包含一个地址吗?并且*vArray"字符串"值.那么,为什么当我"和"一个有价值的地址时,这给了我一个平等的呢?

Dre*_*ann 5

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

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