【IOS 开发】Object - C 数组使用详解

举报
韩曙亮 发表于 2022/01/11 02:40:56 2022/01/11
【摘要】 . 一. 一维数组 1. 一维数组定义 (1) 数组定义 数组定义格式 : type arrayName[len]; -- 默认初始化 : 注意 数组定以后, 如果是 int 数组默认初始化为 0, 如果是浮点型 默认元素为 0.0, 如果是 指针类型数组 默认类型 null; (2) 数字地址计算 数组元素地址性质...

.



一. 一维数组



1. 一维数组定义



(1) 数组定义


数组定义格式 : type arrayName[len];

-- 默认初始化 : 注意 数组定以后, 如果是 int 数组默认初始化为 0, 如果是浮点型 默认元素为 0.0, 如果是 指针类型数组 默认类型 null;



(2) 数字地址计算


数组元素地址性质 : 数组元素是连续存放的;

-- 数组首地址 : 数组变量是一个指针, 其存放了数组中元素的首地址;

-- 元素地址计算公式 : 元素地址 = 数组首地址 + 数组元素所占内存大小 * 元素索引值;




2. 数组初始化


指定数组元素个数

-- 全部初始化 : 对数组的所有的元素进行初始化;

-- 部分初始化 : 对数组中的一部分元素进行初始化;


不指定数组个数 : 如果不指定数组个数, 定义时必须初始化, 会根据初始化的元素个数自动推断数组长度;


数组长度计算 : sizeof(arrayName) / sizeof(arrayName[0]);



3. 代码示例


代码示例

-- 代码内容


  
  1. /*************************************************************************
  2. > File Name: 12-oneArray.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 日 12/ 7 16:30:31 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. //定义数组格式 type arrayName[length]
  12. int array[5];
  13. //定义长度, 完全赋值
  14. int array1[5] = {0, 1, 2, 3, 4};
  15. //定义长度, 不完全赋值
  16. int array2[5] = {0, 1, 2};
  17. //不定义长度, 必须初始化
  18. int array3[] = {0, 1, 2};
  19. //定义 C语言字符串数组
  20. char * array4[] = {"csdn", "octopus", "hello"};
  21. //定义 Object-C 字符串数组
  22. NSString *array5[] = {@"csdn", @"octopus", @"hello"};
  23. //遍历 array2
  24. for(int i = 0; i < sizeof(array2) / sizeof(array2[0]); i ++)
  25. {
  26. NSLog(@"array2[%d] = %d", i, array2[i]);
  27. }
  28. }
  29. }
执行结果

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 代码


  
  1. /*************************************************************************
  2. > File Name: 12-multiArray.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 四 12/11 00:59:14 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. printf("1. 初始化全部数组的部分内容\n");
  12. int array1[3][5] = {
  13. {1, 2},
  14. {5, 7, 7},
  15. {2, 4}
  16. };
  17. for(int i = 0; i < sizeof(array1)/sizeof(array1[0]); i ++)
  18. {
  19. for(int j = 0; j < sizeof(array1[0])/sizeof(array1[0][0]); j ++)
  20. {
  21. printf("%d\t", array1[i][j]);
  22. }
  23. printf("\n");
  24. }
  25. printf("\n2. 初始化部分数组的部分内容\n");
  26. int array2[3][5] = {
  27. {1, 2, 4, 6, 7},
  28. {1}
  29. };
  30. for(int i = 0; i < sizeof(array2)/sizeof(array2[0]); i ++)
  31. {
  32. for(int j = 0; j < sizeof(array2[0])/sizeof(array2[0][0]); j ++)
  33. {
  34. printf("%d\t", array2[i][j]);
  35. }
  36. printf("\n");
  37. }
  38. printf("\n3. 省略数组的长度\n");
  39. int array3[][5] = {
  40. {1, 2, 4, 6, 7},
  41. {1}
  42. };
  43. for(int i = 0; i < sizeof(array3)/sizeof(array3[0]); i ++)
  44. {
  45. for(int j = 0; j < sizeof(array3[0])/sizeof(array3[0][0]); j ++)
  46. {
  47. printf("%d\t", array3[i][j]);
  48. }
  49. printf("\n");
  50. }
  51. printf("\n4. 省略数组的大括号\n");
  52. int array4[][5] = {
  53. 1, 2, 4, 6, 7,
  54. 1
  55. };
  56. for(int i = 0; i < sizeof(array4)/sizeof(array4[0]); i ++)
  57. {
  58. for(int j = 0; j < sizeof(array4[0])/sizeof(array4[0][0]); j ++)
  59. {
  60. printf("%d\t", array4[i][j]);
  61. }
  62. printf("\n");
  63. }
  64. }
  65. }

-- 执行结果

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 会自动添加 日期 时间 自动换行 等操作;


示例


  
  1. /*************************************************************************
  2. > File Name: 12-NSLogVSprintf.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 四 12/11 01:18:17 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. NSLog(@"这是 NSLog 输出的字符串");
  12. printf("这是 printf 输出的字符串");
  13. }
  14. }

执行结果

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


代码示例


  
  1. /*************************************************************************
  2. > File Name: 12-charArray.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 四 12/11 01:27:12 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. char char_array[] = "fuck";
  12. char char_array1[] = {
  13. 'f', 'u', 'c', 'k', '\0'
  14. };
  15. printf("char_array 大小 : %lu, char_array1 大小 : %lu\n", sizeof(char_array), sizeof(char_array1));
  16. }
  17. }

运行结果

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. 常用的字符串处理函数



代码示例

-- 代码


  
  1. /*************************************************************************
  2. > File Name: 12-strMethod.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 四 12/11 01:34:08 2014
  6. ************************************************************************/
  7. #include <string.h>
  8. #import <Foundation/Foundation.h>
  9. int main(int argc, char * argv[])
  10. {
  11. @autoreleasepool {
  12. char c = '1';
  13. char c1 = 'A';
  14. char c2 = 'a';
  15. char c3 = '\t';
  16. NSLog(@"字符相关函数");
  17. printf("c = %c 是否为数字或数字 : %d \n", c, isalnum(c));
  18. printf("c = %c 是否为字母 : %d\n", c, isalpha(c));
  19. printf("c = %c 是否为控制字符 : %d\n",c, iscntrl(c));
  20. printf("c = %c 是否为控制数字 : %d\n", c, isdigit(c));
  21. printf("c = %c 是否为可打印字符 : %d\n", c, isgraph(c));
  22. printf("c1 = %c 是否为小写字母 : %d\n", c1, islower(c1));
  23. printf("c1 = %c 是否为大写字母 : %d\n", c1, isupper(c1));
  24. printf("c1 = %c 是否为标点符号 : %d\n", c1, ispunct(c1));
  25. printf("c3 = %c 是否为空白字符 : %d\n", c3, isspace(c3));
  26. printf("c1 = %c 是否是十六进制字符 : %d\n", c1, isxdigit(c1));
  27. NSLog(@"字符串相关函数");
  28. char array[20] = "fuck";
  29. char array1[] = "bitch";
  30. //注意 字符串 array 要有足够的空间 存放 后面的 array1
  31. printf("%s 拼接字符串 \n", strcat(array, array1));
  32. printf("array 出现 c 的位置 %s \n", strchr(array, 'c'));
  33. printf("比较 array 与 array1 大小 : array 是否大于 array1 : %d\n", strcmp(array, array1));
  34. }
  35. }


-- 执行结果

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



文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/41788201

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。