2012-01-06 5 views
0

나는이 프로그램을 내 프로그램에 복사 한 코드를 집어 들었다.iterate 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") 
{ 
    // ... 
} 

하지만 난 왜 understant하지 않습니다이 숯불 **을 반복하는 나에게 새로운 방법이 될 것 같습니다! vArray는 주소를 포함해야한다고 생각하십니까? 그리고 * vArray "문자열"값. 그렇다면 가치를 가진 주소를 "AND"할 때 이것이 평등을 가져 오는 이유는 무엇입니까?

+1

힌트 :'&&'는 논리적 AND이고'&'는 2 진 AND입니다. –

+0

C 태그가 C++로 대체되었습니다. C에'::'이 없습니다. – pmg

답변

3

루프 조건이다.

+0

mmm nice * vArray의 마지막 값이 0이라고 가정하지 않았습니다! 그래서 첫 번째 매개 변수 (vArray)는 정당성 검사입니다 ... 감사합니다. 훨씬 더 명확합니다! – morandg

+0

온 전성 검사 만이 아닙니다. 'g_value_get_boxed()'가'NULL'을 리턴하고 그 검사가 아니라면, BAM! 세그멘테이션 오류. – ptomato

5

vArray && *vArray은 먼저이 가리키는 포인터 NULL가 아니라고 검사가 NULL없는 가정 포인터 vArrayNULL이 아니라는 것을 확인하고있어 (vArray != NULL) && (*vArray != NULL)

동일하다. 이것은 기본적으로 char** 포인터가 null 인 char*에 null이 아닌 포인트 마찬가지입니다

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

에 대한 속기

vArray && *vArray 

+0

아, 고맙습니다. @ ErnestFriedman-Hill. 편집 됨. –

관련 문제