كيف يمكنني اختبار ما إذا كانت البدائية في الهدف - C هل لا شيء؟

StackOverflow https://stackoverflow.com/questions/895495

  •  23-08-2019
  •  | 
  •  

سؤال

أنا أفعل شيكا في تطبيق 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) {
    ...
}

مرحبا بك في العالم الرائع من C. أي قيمة لا تساوي عدد صحيح 0 أو مؤشر فارغ صحيح.

ولكن لديك خطأ: ints لا يمكن أن تكون فارغة. انهم أنواع قيمة مثل في جافا.

إذا كنت ترغب في "مربع" عدد صحيح، فأنت بحاجة إلى طلب ذلك عن عنوانها:

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