итерация символа ** почему это работает? - PullRequest
0 голосов
/ 06 января 2012

Я взял этот фрагмент кода, который копировал в свою программу.Мне кажется, это новый способ перебора символов **:

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 ]

5 голосов
/ 06 января 2012

vArray && *vArray эквивалентно (vArray != NULL) && (*vArray != NULL)

Сначала проверяется, что указатель vArray не является NULL, и, предполагая, что это не NULL, проверяется, указывает ли указатель нане NULL.

3 голосов
/ 06 января 2012

Условие цикла равно

vArray && *vArray

Это в основном сокращение для

(vArray != 0) && (*vArray != 0)

, которое имеет значение true, если указатель char** не равен нулю и указывает на char*который не нулевой.

...