oc中null NULL nil void (void*)实例讲解

来源:互联网 发布:四九算法准吗 编辑:程序博客网 时间:2024/06/07 03:16

NULL 是指的是C中空指针
nil 指的是OC中把一个对象设置为空
void 一般指的是返回值为空
(void *) 一般指的是无类型的指针 而不是空指针 通用指针的意思
类似的还有有趣的例子 [Object new ] &[NSNull null]
前者每次都会新建一个对象 而重复后者的时候打印地址会发现地址相同 后者最主要的
作用是用来在数组占位,不需要新建更多的对象
下面为例子::

//
// main.m
// Foundation-空值
//
// Created by qingyun on 15/12/8.
// Copyright (c) 2015年 qingyun. All rights reserved.
//

import

import “TestClass.h”

int main(int argc, const char * argv[]) {
// NULL C的空值针
char *p = NULL;
// void 代表没有,一般用于空参数或者空返回值的表示
void *p1; // 这时void代表空类型,p1是没有类型的指针
p1 = p;
// null
NSString *str;
NSLog(@”str >>>> %@”, str);
TestClass *tc = [TestClass new];
NSLog(@”tc >>>>> %@”, tc);
// nil 表示空对象
NSLog(@”tc >>>>> %p”, tc);
tc = nil;
NSLog(@”tc >>>>> %p”, tc);
// @0 表示数值0的对象
int a = [@0 intValue];
NSArray *arr = @[@11,@”abc”,@YES, @0];

// NSNull 来表示还没有内容的对象 [NSNull null]NSMutableArray *group1 = [NSMutableArray arrayWithArray:@[@"zongkai",[NSNull null],@"mengjie",[NSNull null],@"erlong",[NSNull null],@"lifeng",[NSNull null],[NSNull null]]];NSLog(@"group1 >>>> %@", group1);

// [NSObject new];//a
// [NSObject new];//b
// [NSObject new];//c
//
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]); //null1
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
NSLog(@”nsnull >>>> %@, %p”, [NSNull null],[NSNull null]);
// [NSNull null]; //null2

NSString *st = @"Moumoumou";//NSInteger index = 0;NSMutableArray *indexs = [NSMutableArray array];// 在集合遍历的时候的不能将该集合的元素改变

// for (id obj in group1) {
// if (obj == [NSNull null]) {
// index = [group1 indexOfObject:obj];
// break;
// }
// }
// group1[index] = st;
for (int i=0; i<[group1 count]; i++) {
if (group1[i] == [NSNull null]) {
[indexs addObject:@(i)];//
}
}
NSLog(@”indexs >>>>> %@”, indexs);

if 0

// 让系统选择默认第一个空位置NSInteger firstFreePosition = [[indexs firstObject] integerValue];group1[firstFreePosition] = st;

else

// 学生自己选择自己的空位置NSInteger firstFreePosition;NSLog(@"请选择您要的位置:");for (NSNumber *num in indexs) {    printf("%ld\t", (long)[num integerValue]);}printf("\n");scanf("%ld", &firstFreePosition);group1[firstFreePosition] = st;

endif

NSLog(@"group1 >>> %@", group1);return 0;}
1 0