【IOS開発】Object-C配列使用の詳細

8599 ワード

.
一.1 D配列
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 

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.2 D配列定義
2 D配列定義形式:type arrayName[rowLength][columnLength];
--配列の長さ:左側の数字rowLengthは1次元配列の個数で、数行あります.
2.多次元配列の初期化
いくつかの初期化方式:例int array[3][5];
--すべての二次配列を初期化する:3つの一次元配列を初期化することができ、一次元配列の要素の個数は任意である.
--初期化部分の二次配列:3つ未満の一次元配列を初期化でき、一部のみを初期化できます.
--2 D配列の長さを省略:配列を宣言するときに初期化を行うと、配列の最初の配列の長さを省略できます.
--初期化時の二次配列括弧を省略:一次元配列の括弧は省略でき、初期化された部分は自動的に埋め込まれます.
3.例
コードの例:
--Object-Cコード:
/*************************************************************************
    > File Name: 12-multiArray.m
    > Author: octopus
    > Mail: octopus_truth.163.com 
    > Created Time:   12/11 00:59:14 2014
 ************************************************************************/

#import 

int main(int argc, char * argv[])
{
	@autoreleasepool {

		printf("1.             
"); 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("
"); } printf("
2.
"); 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("
"); } printf("
3.
"); 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("
"); } printf("
4.
"); 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("
"); } } }

--実行結果:
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 

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.文字配列と文字列
文字配列の定義方法:次の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 

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
", 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 
 #import 

int main(int argc, char * argv[])
{
	@autoreleasepool {
		char c = '1';
		char c1 = 'A';
		char c2 = 'a';
		char c3 = '\t';

		NSLog(@"      ");

		printf("c = %c           : %d 
", c, isalnum(c)); printf("c = %c : %d
", c, isalpha(c)); printf("c = %c : %d
",c, iscntrl(c)); printf("c = %c : %d
", c, isdigit(c)); printf("c = %c : %d
", c, isgraph(c)); printf("c1 = %c : %d
", c1, islower(c1)); printf("c1 = %c : %d
", c1, isupper(c1)); printf("c1 = %c : %d
", c1, ispunct(c1)); printf("c3 = %c : %d
", c3, isspace(c3)); printf("c1 = %c : %d
", c1, isxdigit(c1)); NSLog(@" "); char array[20] = "fuck"; char array1[] = "bitch"; // array array1 printf("%s
", strcat(array, array1)); printf("array c %s
", strchr(array, 'c')); printf(" array array1 : array array1 : %d
", 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