문제

iPhone 응용 프로그램에서 확인을하고 있습니다.

int var;
if (var != nil)

작동하지만 X 코드에서는 "포인터와 정수의 비교"를 생성하고 있습니다. 어떻게 수정합니까?

나는 Java 세계에서 왔는데, 위의 진술이 상승에 실패 할 것이라고 확신합니다.

도움이 되었습니까?

해결책

프리미티브는 될 수 없습니다 nil. nil 객관적인 C 객체에 대한 포인터를 위해 예약되어 있습니다. nil 기술적으로 포인터 유형이며, 캐스트없이 포인터와 정수를 믹싱하면 거의 항상 컴파일러 경고를 초래할 수 있습니다. 한 가지 예외가 있습니다. 캐스트없이 정수 0을 포인터로 암시 적으로 변환하는 것은 완벽합니다.

0과 "값 없음"을 구별하려면 NSNumber 수업:

NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil)  // compare against nil
    ;  // do one thing
else if([num intValue] == 0)  // compare against 0
    ;  // do another thing

다른 팁

if (var) {
    ...
}

The Wonderful World of C에 오신 것을 환영합니다. 정수 0 또는 널 포인터와 동일하지 않은 값은 사실입니다.

그러나 버그가 있습니다 : ints는 null이 될 수 없습니다. 그들은 Java와 마찬가지로 가치 유형입니다.

정수를 "상자"하려면 주소를 요청해야합니다.

int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0;  // This is setting "the box" to null,
                  //  NOT setting the integer value
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top