【IOS 开发】Object - C 数组使用详解
.
一. 一维数组
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"}; //遍历 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
【IOS 开发】Object - C 数组使用详解的更多相关文章
- iOS开发--常用技巧 (MJRefresh详解)
iOS开发--常用技巧 (MJRefresh详解) https://github.com/CoderMJLee/MJRefresh 下拉刷新01-默认 self.tableView.head ...
- iOS开发——多线程OC篇&多线程详解
多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...
- iOS开发——实用技术OC篇&事件处理详解
事件处理详解 一:事件处理 事件处理常见属性: 事件类型 @property(nonatomic,readonly) UIEventType type; @property(nonatomic ...
- iOS开发——屏幕适配篇&Masonry详解
Masonry详解 前言 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-ip ...
- iOS开发——UI篇OC&transform详解
transframe属性详解 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两大类 (1) 创建“基 ...
- ios开发——实战OC篇&FMDB详解
FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
- iOS开发中UIPopoverController的使用详解
这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController ...
- 【转】IOS开发网络篇之──ASIHTTPRequest详解
ASIHTTPRequest 详解, http 请求终结者 版权归旺财勇士所有〜转载需声名〜 原贴地地址:http://wiki.magiche.net/pages/viewpage.action?p ...
- IOS开发网络篇之──ASIHTTPRequest详解
目录 目录 发起一个同步请求 创建一个异步请求 队列请求 请求队列上下文 ASINetworkQueues, 它的delegate提供更为丰富的功能 取消异步请求 安全的内存回收建议 向服务器端上传数 ...
随机推荐
- C语言程序设计作业
一.阅读邹欣老师的博客--师生关系,针对文中的几种师生关系谈谈你的看法,你期望的师生关系是什么样的? 我期望老师与学生之间的关系是和睦相处的,学生有问题可以找老师,当然是再老师有空的条件下.老师和学生 ...
- Server-U FTP与AD完美集成方案详解
最近咱有个任务,那就是把公司的文件服务器.FTP服务器.邮件服务器进行迁移并作相应的整合.登陆后台查看了,公司目前正在使用的方案.FTP服务器使用的是Server-u FTP,验证方式选择的windo ...
- RestTemplate的异常:Not enough variables available to expand
原因:RestTemplate使用出错,我的情况是不知道这里要求用RestTemplate的使用格式,应该很多人都是这样吧?不过,看了下RestTemplate,感觉其实还是很好用的. RestTem ...
- Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区别
这个网址 https://www.cnblogs.com/scofi/p/4867851.html 讲述了Python 头部 #!/usr/bin/python 和 #!/usr/bin/env 的区 ...
- Spring-cloud(六) Hystrix入门
前提 一个可用的Eureka注册中心(文中以之前博客中双节点注册中心,不重要) 一个连接到这个注册中心的服务提供者 快速入门 项目搭建 搭建一个新maven项目,artifactid为Ribbon-c ...
- Helm 架构 - 每天5分钟玩转 Docker 容器技术(161)
在实践之前,我们先来看看 Helm 的架构. Helm 有两个重要的概念:chart 和 release. chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板.参数定 ...
- ctf writeup之程序员密码
起因 在v2ex上看到有人发了一篇帖子,说做了一个程序员小游戏,遂试玩了一下. 游戏的地址在这里: http://www.bettertomissthantomeet.com/pages/level. ...
- Go 语言递归函数
递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } ...
- jQuery – AJAX load() 方法
jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法: $(selector). ...
- Jmeter(一)_环境部署
简介: Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试CS/BS的软件.它可以用来测试静态和动态资源的性能,可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分 ...