1. 程式人生 > >oc中null NULL nil void (void*)例項講解

oc中null NULL nil void (void*)例項講解

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;}

相關推薦

聚集索引和非聚集索引整理 例項講解

很好的一篇博文,值得轉載。 官方說法: 聚集索引   一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。   聚集索引確定表中資料的物理順序。聚集索引類似於電話簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此一個表只能包含一個聚集索引。但

ocnull NULL nil void void*例項講解

NULL 是指的是C中空指標 nil 指的是OC中把一個物件設定為空 void 一般指的是返回值為空 (void *) 一般指的是無型別的指標 而不是空指標 通用指標的意思 類似的還有有趣的例子 [Object new ] &[NSNull n

淺談NULL、0、void *0

一般C中都用巨集定義 #define NULL  0#define NULL  ((void*) 0) 用NULL來表示一些無效的返回值,特別是返回無效指標。比如fopen函式,malloc函式等。 0是一個很特別的數,不僅是整數0,而且還有很多特別的意義,比如上面中就用

C之 goto 和 void

C語言 goto void 我們在 C 語言中經常會見到 void ,也會偶爾見到 goto。那麽 C 語言中既然有 goto ,為什麽我們在代碼中見的很少呢?在以前很多的項目經驗中,我們得到這樣一條潛規則:一般項目都是禁用 goto 的,程序質量與 goto 的出現次數成反比。自

在上網時出現Javascript:void0網頁沒有反應

從上上週開始發現寫CSDN部落格的時候網頁沒有反應,而且在個人分類這沒有顯示分類的類別,除了能進去這個頁面其他的啥也操作不了。 網頁左下角顯示Javascript:void(0),如圖所示 後來查的

javaScript:void0含義

javascript:void(0) 中最關鍵的是 void 關鍵字, void 是 JavaScript 中非常重要的關鍵字,該操作符指定要計算一個表示式但是不返回值。 語法格式如下: <head> <script type="text/javascr

關於連結地址為JavaScript:void0的問題

我們在點選超連結時,經常發現有的超連結左下角顯示的為javascript:void(0)的情況,這種情況主要說明此處的超連結主要目的不是為了連線到某處,而是為了要超連結onclick裡的function,例如: <a href="javascript

百度雲網盤下載無反應javascript:void0救急辦法

點選百度雲網盤普通下載的時候經常出現沒反應 提示javascript:void(0) 以下是應急辦法: 1.儲存到自己的百度網盤 2.嘗試下載,不行繼續 3.選擇一個能下載的,跟目標檔案合併下載

void*指標的型別轉換-專講

指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址,所以不管你儲存的是int指標、float指標、long指標,對於儲存指標的記憶體來說都是分配同樣大小的記憶體的,這也為使用void指標可以儲存任意型別的指標打下了基礎,但是注意在使用void指標,要將其強制轉換為具體的指標型別,詳解

關於void程式設計規範、void*指標void*型別轉換的詳解

 void關鍵字的使用規則:              1. 如果函式沒有返回值,那麼應宣告為void型別;    &n

指標為NULL與空間malloc0的解釋

char   *ptr; if ((ptr   =   (char   *)malloc(0))   ==   NULL)    puts( "Got   a   null   pointer ");  else  puts( "Got   a   valid   pointer ");  上面程式在VC6

十二Hibernate的多表操作1:單向多對一

art 保存 int gen round t對象 情況 映射文件 拋出異常 由“多”方可知“一”方的信息,比如多個員工使用同一棟公寓,員工可以知道公寓的信息,而公寓無法知道員工的信息。 案例一: pojo類 public class Department {

AndroidStudio集成使用Kotlin

lib number lock rip enable gets nap ets android開發 AndroidStudio中集成使用Kotlin(一) 在Android開發中,不僅僅可以使用Java作為它的開發語言,好早就開始流行使用Kotlin進行Android開發

十四Hibernate的多表操作4:單向一對一

odin utf-8 lds () clas string 方式 rdb style 案例一: 註解方式實現一對一 UserBean.java package bean; import java.io.Serializable; import javax.pers

Android關於JNI 的學習對於JNIEnv的一些認識

else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢

Java web常見編碼亂碼問題

catalina 轉換 alt str 檢測 內容 tom 拼搏 image 根據上篇記錄Java web中常見編碼亂碼問題(一), 接著記錄亂碼案例:   案例分析:   2、輸出流寫入內容或者輸入流讀取內容時亂碼(內容中有中文)   原因分析:     a、 如果是

C/C++作用域詳解

防止 局部作用域 gist 文件中 方式 為什麽不使用 形式參數 lan archive 作用域規則告訴我們一個變量的有效範圍,它在哪兒創建,在哪兒銷毀(也就是說超出了作用域)。變量的有效作用域從它的定義點開始,到和定義變量之前最鄰近的開括號配對的第一個閉括號。也就是說,作

OracleMerge into用法總結 轉載

字符 存在 sin 刪除 ron mic 但是 多個 前段時間 Oracle中Merge into用法總結 (出處:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因:   前段時間,因為涉及到一張表的大數據操作,要同時

Oracle MERGE語句的用法轉載

同時 sdn ble reat nth merge type href detail 原文章出處(http://blog.csdn.net/lichkui/article/details/4306299) MERGE語句是Oracle9i新增的語法,用來合並UPDATE和I

Maven項目遇到的奇葩問題

圖片 周期 required pan maven項目 require err fig ++ 場景描寫敘述 開發項目搞環境是一個很蛋疼的問題。總是會遇到各種奇葩的問題,上一篇文章http://blog.csdn.net/gao36951/article/