Are NULL and nil equivalent?
nsnull, null, objective-c
Solution
`nil` and `NULL` are essentially the same, `nil` is something like `(NSObject *)0`, while `NULL` is more like `(void *)0`. But both are pointers with an integer value of zero. You can send messages to `nil` without raising an error.
`NSNull` and `NULL` (or `nil`, of course) are different things, however. You just use `NSNull` as a helper to add an `empty` object to an `NSArray` or another container class, since you can't add `nil` to them. So instead, you use `[NSNull null]` as a replacement, and you have to check if an array element is `NSNull`, not if it's `nil` (it will never be equal to `nil`).
Problem
Actually my question here is: are `null` and `nil` equivalent or not? I have an example but I am confused when they are equal when they are not. ``` NSNull *nullValue = [NSNull null]; NSArray *arrayWithNull = [NSArray arrayWithObject:nullValue]; NSLog(@"arrayWithNull: %@", arrayWithNull); id aValue = [arrayWithNull objectAtIndex:0]; if (aValue == nil) { NSLog(@"equals nil"); } else if (aValue == [NSNull null]) { NSLog(@"equals NSNull instance"); if ([aValue isEqual:nil]) { NSLog(@"isEqual:nil"); } } ``` Here in the above case it shows that both `null` and `nil` are not equal and it displays "equals NSNull instance" ``` NSString *str=NULL; id str1=nil; if(str1 == str) { printf("\n IS EQUAL........"); } else { printf("\n NOT EQUAL........"); } ``` And in the second case it shows both are equal and it displays "IS EQUAL". Anyone's help will be much appreciated. Thank you, Monish.