【IOS 開發】Object - C 數組使用詳解

來源:互聯網
上載者:User

標籤:style   blog   io   ar   color   os   使用   sp   for   

.



一. 一維數組



1. 一維數組定義



(1) 數組定義


數組定義格式 : type arrayName[len];

-- 預設初始化 : 注意 數組定以後, 如果是 int 數組預設初始化為 0, 如果是浮點型 預設元素為 0.0, 如果是 指標類型數組 預設類型 null;



(2) 數字地址計算


數組元素地址性質 : 數組元素是連續存放的;

-- 數組首地址 : 陣列變數是一個指標, 其存放了數組中元素的首地址;

-- 元素地址計算公式 : 元素地址 = 數組首地址 + 數組元素所佔記憶體大小 * 元素索引值;




2. 數組初始化


指定數組元素個數

-- 全部初始化 : 對數組的所有的元素進行初始化;

-- 部分初始化 : 對數組中的一部分元素進行初始化;


不指定數組個數 : 如果不指定數組個數, 定義時必須初始化, 會根據初始化的元素個數自動推斷數組長度;


數組長度計算 : sizeof(arrayName) / sizeof(arrayName[0]);



3. 程式碼範例


程式碼範例

-- 代碼內容

/*************************************************************************    > File Name: 12-oneArray.m    > Author: octopus    > Mail: octopus_truth.163.com     > Created Time: 日 12/ 7 16:30:31 2014 ************************************************************************/#import <Foundation/Foundation.h>int main(int argc, char * argv[]){@autoreleasepool {//定義數組格式 type arrayName[length]int array[5];//定義長度, 完全賦值int array1[5] = {0, 1, 2, 3, 4};//定義長度, 不完全賦值int array2[5] = {0, 1, 2};//不定義長度, 必須初始化int array3[] = {0, 1, 2};//定義 C語言字串數組char * array4[] = {"csdn", "octopus", "hello"};//定義 Object-C 字串數組NSString *array5[] = {@"csdn", @"octopus", @"hello"};//遍曆 array2for(int i = 0; i < sizeof(array2) / sizeof(array2[0]); i ++){NSLog(@"array2[%d] = %d", i, array2[i]);}}}
-- 執行結果

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 12-oneArray.m octopus-2:oc octopus$ ./a.out 2014-12-07 16:38:58.238 a.out[379:507] array2[0] = 02014-12-07 16:38:58.241 a.out[379:507] array2[1] = 12014-12-07 16:38:58.242 a.out[379:507] array2[2] = 22014-12-07 16:38:58.242 a.out[379:507] array2[3] = 02014-12-07 16:38:58.243 a.out[379:507] array2[4] = 0




三. 多維陣列



1. 二維數組定義


二維數組定義格式 : type arrayName[rowLength][columnLength];

-- 數組長度 : 左側的數字 rowLength 是 一維數組的個數, 即有幾行;



2. 多維陣列初始化


幾種初始化方式 : 樣本 int array[3][5];

-- 初始化全部二級數組 : 可以為其初始化 3 個一維數組, 一維數組中得元素個數隨意;

-- 初始化部分二級數組 : 可以為其初始化 少於 3 個一維數組, 只初始化一部分;

-- 省略二維數組長度 : 如果在聲明數組時進行初始化, 那麼可以省略數組的 第一個 數組長度;

-- 省略初始化時的二級數組括弧 : 一維數組的括弧可以省略, 系統會自動預設初始化的部分自動填滿;



3. 樣本


程式碼範例

-- Object-C 代碼

/*************************************************************************    > File Name: 12-multiArray.m    > Author: octopus    > Mail: octopus_truth.163.com     > Created Time: 四 12/11 00:59:14 2014 ************************************************************************/#import <Foundation/Foundation.h>int main(int argc, char * argv[]){@autoreleasepool {printf("1. 初始化全部數組的部分內容\n");int array1[3][5] = {{1, 2},{5, 7, 7},{2, 4}};for(int i = 0; i < sizeof(array1)/sizeof(array1[0]); i ++){for(int j = 0; j < sizeof(array1[0])/sizeof(array1[0][0]); j ++){printf("%d\t", array1[i][j]);}printf("\n");}printf("\n2. 初始化部分數組的部分內容\n");int array2[3][5] = {{1, 2, 4, 6, 7},{1}};for(int i = 0; i < sizeof(array2)/sizeof(array2[0]); i ++){for(int j = 0; j < sizeof(array2[0])/sizeof(array2[0][0]); j ++){printf("%d\t", array2[i][j]);}printf("\n");}printf("\n3. 省略數組的長度\n");int array3[][5] = {{1, 2, 4, 6, 7},{1}};for(int i = 0; i < sizeof(array3)/sizeof(array3[0]); i ++){for(int j = 0; j < sizeof(array3[0])/sizeof(array3[0][0]); j ++){printf("%d\t", array3[i][j]);}printf("\n");}printf("\n4. 省略數組的大括弧\n");int array4[][5] = {1, 2, 4, 6, 7,1};for(int i = 0; i < sizeof(array4)/sizeof(array4[0]); i ++){for(int j = 0; j < sizeof(array4[0])/sizeof(array4[0][0]); j ++){printf("%d\t", array4[i][j]);}printf("\n");}}}

-- 執行結果

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 12-multiArray.m octopus-2:oc octopus$ ./a.out 1. 初始化全部數組的部分內容1200057700240002. 初始化部分數組的部分內容1246710000000003. 省略數組的長度12467100004. 省略數組的大括弧1246710000



三. 字串, 字元數組 與 字串相關函數



1. NSLog 與 printf 對比 


NSLog 與 printf 對比

-- 輸出字串格式不同 : printf 輸出 C 語言格式字串, 如 "string", NSLog 輸出 Object-C 字串, 如 @"string" ;

-- NSLog 有多餘操作 : NSLog 會自動添加 日期 時間 自動換行 等操作;


樣本

/*************************************************************************    > File Name: 12-NSLogVSprintf.m    > Author: octopus    > Mail: octopus_truth.163.com     > Created Time: 四 12/11 01:18:17 2014 ************************************************************************/#import <Foundation/Foundation.h>int main(int argc, char * argv[]){@autoreleasepool {NSLog(@"這是 NSLog 輸出的字串");printf("這是 printf 輸出的字串");}}

-- 執行結果

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 12-NSLogVSprintf.m octopus-2:oc octopus$ ./a.out 2014-12-11 01:19:07.370 a.out[1925:507] 這是 NSLog 輸出的字串這是 printf 輸出的字串octopus-2:oc octopus$ 



2. 字元數組 和 字串 


定義字元數組方式 : 下面的兩種方法是等價的;

-- 使用字串初始化 : char array[] = "fuck", 使用這種方法定以後, 會在後面自動加上 ‘\0‘;

-- 使用數組方式初始化 : char array[] = {‘f‘, ‘u‘, ‘c‘, ‘k‘, ‘\0‘};


關於字元數組的長度 : 一個由 4 個字元組成的數組, 其長度是 5, 後面還需要加上一個 ‘\0‘;


程式碼範例

/*************************************************************************    > File Name: 12-charArray.m    > Author: octopus    > Mail: octopus_truth.163.com     > Created Time: 四 12/11 01:27:12 2014 ************************************************************************/#import <Foundation/Foundation.h>int main(int argc, char * argv[]){@autoreleasepool {char char_array[] = "fuck";char char_array1[] = {‘f‘, ‘u‘, ‘c‘, ‘k‘, ‘\0‘};printf("char_array 大小 : %lu, char_array1 大小 : %lu\n", sizeof(char_array), sizeof(char_array1));}}

-- 運行結果

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 12-charArray.m octopus-2:oc octopus$ ./a.out char_array 大小 : 5, char_array1 大小 : 5



3. 常用的字串處理函數



程式碼範例

-- 代碼

/*************************************************************************    > File Name: 12-strMethod.m    > Author: octopus    > Mail: octopus_truth.163.com     > Created Time: 四 12/11 01:34:08 2014 ************************************************************************/ #include <string.h> #import <Foundation/Foundation.h>int main(int argc, char * argv[]){@autoreleasepool {char c = ‘1‘;char c1 = ‘A‘;char c2 = ‘a‘;char c3 = ‘\t‘;NSLog(@"字元相關函數");printf("c = %c  是否為數字或數字 : %d \n", c, isalnum(c));printf("c = %c 是否為字母 : %d\n", c, isalpha(c));printf("c = %c 是否為控制字元 : %d\n",c, iscntrl(c));printf("c = %c 是否為控制數字 : %d\n", c, isdigit(c));printf("c = %c 是否為可列印字元 : %d\n", c, isgraph(c));printf("c1 = %c 是否為小寫字母 : %d\n", c1, islower(c1));printf("c1 = %c 是否為大寫字母 : %d\n", c1, isupper(c1));printf("c1 = %c 是否為標點符號 : %d\n", c1, ispunct(c1));printf("c3 = %c 是否為空白字元 : %d\n", c3, isspace(c3));printf("c1 = %c 是否是十六進位字元 : %d\n", c1, isxdigit(c1));NSLog(@"字串相關函數");char array[20] = "fuck";char array1[] = "bitch";//注意 字串 array 要有足夠的空間 存放 後面的 array1printf("%s 拼接字串 \n", strcat(array, array1));printf("array 出現 c 的位置 %s \n", strchr(array, ‘c‘));printf("比較 array 與 array1 大小 : array 是否大於 array1 : %d\n", strcmp(array, array1));}}


-- 執行結果

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 12-strMethod.m octopus-2:oc octopus$ ./a.out 2014-12-11 02:11:08.608 a.out[2164:507] 字元相關函數c = 1  是否為數字或數字 : 1 c = 1 是否為字母 : 0c = 1 是否為控制字元 : 0c = 1 是否為控制數字 : 1c = 1 是否為可列印字元 : 1c1 = A 是否為小寫字母 : 0c1 = A 是否為大寫字母 : 1c1 = A 是否為標點符號 : 0c3 =  是否為空白字元 : 1c1 = A 是否是十六進位字元 : 12014-12-11 02:11:08.610 a.out[2164:507] 字串相關函數fuckbitch 拼接字串 array 出現 c 的位置 ckbitch 比較 array 與 array1 大小 : array 是否大於 array1 : 4



【IOS 開發】Object - C 數組使用詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.