【IOS開発】Object-C配列使用の詳細
8599 ワード
.
一.1 D配列
1.一次元配列定義
(1)配列定義
配列定義フォーマット:type arrayName[len];
--デフォルト初期化:配列決定後、int配列のデフォルト初期化が0の場合、浮動小数点型デフォルト要素が0.0の場合、ポインタタイプ配列のデフォルトタイプnullの場合、
(2)デジタルアドレス計算
配列要素アドレスの性質:配列要素は連続的に格納されます.
--配列ヘッダ:配列変数は、配列内の要素のヘッダアドレスを格納するポインタです.
--要素アドレス計算式:要素アドレス=配列ヘッダ+配列要素が占めるメモリサイズ*要素インデックス値;
2.配列初期化
配列要素の数を指定します.
--すべて初期化:配列のすべての要素を初期化します.
--部分初期化:配列の要素の一部を初期化します.
配列個数を指定しない:配列個数を指定しない場合、定義時に初期化する必要があり、初期化された要素個数に基づいて配列長が自動的に推定されます.
配列長の計算:sizeof(arrayName)/sizeof(arrayName[0]);
3.コード例
コードの例:
--コードの内容:
実行結果:
三.たじゅうはいれつ
1.2 D配列定義
2 D配列定義形式:type arrayName[rowLength][columnLength];
--配列の長さ:左側の数字rowLengthは1次元配列の個数で、数行あります.
2.多次元配列の初期化
いくつかの初期化方式:例int array[3][5];
--すべての二次配列を初期化する:3つの一次元配列を初期化することができ、一次元配列の要素の個数は任意である.
--初期化部分の二次配列:3つ未満の一次元配列を初期化でき、一部のみを初期化できます.
--2 D配列の長さを省略:配列を宣言するときに初期化を行うと、配列の最初の配列の長さを省略できます.
--初期化時の二次配列括弧を省略:一次元配列の括弧は省略でき、初期化された部分は自動的に埋め込まれます.
3.例
コードの例:
--Object-Cコード:
--実行結果:
三.文字列、文字配列と文字列関連関数
1.NSLogとprintfの比較
NSLogとprintfの比較:
--出力文字列フォーマットが異なる:printf出力C言語フォーマット文字列、例えば「string」、NSLog出力Object-C文字列、例えば@「string」;
--NSLogには余計な操作があります:NSLogは自動的に日時の自動改行などの操作を追加します;
例:
--
実行結果:
2.文字配列と文字列
文字配列の定義方法:次の2つの方法は等価です.
--文字列を使用して初期化:char array[]=「fuck」で、この方法で決定すると、後で自動的に'0'が追加されます.
--配列方式を使用して初期化:char array[]={'f','u','c','k','0'};
文字配列の長さについて:4文字からなる配列で、その長さは5で、後に'0'を追加する必要があります.
コードの例:
--
実行結果:
3.一般的な文字列処理関数
コードの例:
--コード:
--実行結果:
一.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