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

.git



一. 一維數組



1. 一維數組定義



(1) 數組定義


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

-- 默認初始化 : 注意 數組定之後, 若是是 int 數組默認初始化爲 0, 若是是浮點型 默認元素爲 0.0, 若是是 指針類型數組 默認類型 null;函數



(2) 數字地址計算


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

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

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




2. 數組初始化


指定數組元素個數blog

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

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


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


數組長度計算 : 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"};

		//遍歷 array2
		for(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] = 0
2014-12-07 16:38:58.241 a.out[379:507] array2[1] = 1
2014-12-07 16:38:58.242 a.out[379:507] array2[2] = 2
2014-12-07 16:38:58.242 a.out[379:507] array2[3] = 0
2014-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. 初始化所有數組的部份內容
1	2	0	0	0	
5	7	7	0	0	
2	4	0	0	0	

2. 初始化部分數組的部份內容
1	2	4	6	7	
1	0	0	0	0	
0	0	0	0	0	

3. 省略數組的長度
1	2	4	6	7	
1	0	0	0	0	

4. 省略數組的大括號
1	2	4	6	7	
1	0	0	0	0



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



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 要有足夠的空間 存放 後面的 array1
		printf("%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 是否爲字母 : 0
c = 1 是否爲控制字符 : 0
c = 1 是否爲控制數字 : 1
c = 1 是否爲可打印字符 : 1
c1 = A 是否爲小寫字母 : 0
c1 = A 是否爲大寫字母 : 1
c1 = A 是否爲標點符號 : 0
c3 = 	 是否爲空白字符 : 1
c1 = A 是不是十六進制字符 : 1
2014-12-11 02:11:08.610 a.out[2164:507] 字符串相關函數
fuckbitch 拼接字符串 
array 出現 c 的位置 ckbitch 
比較 array 與 array1 大小 : array 是否大於 array1 : 4
相關文章
相關標籤/搜索