objective-c是C 语言的超级,直接使用了 C 语言的数组。
定义数组
语法格式:type array[length]
,其中的 length 可以是个固定的整数也可以是整数变量或表达式。
定义数组时,如果没有对数组进行初始化,系统对数组元素赋值为默认的初始值。赋初始值的规则如下:
- 所有整型(包括字符型)的数组元素,系统默认赋值为0;
- 所有浮点型的数组元素,系统默认赋值为0.0;
- 所有指针型的数组元素,系统默认赋值为空
定义数组后,数组中元素在内存中是连续存放的。如定义 int arr[5]; 在内存中的存放机制如下图:
数组的初始化
语法格式为:type arrayName[length]={ele1,ele2,ele3,……,eleN};
说明:
- int arr[5]={3,2,1};//赋值时可以不全部赋值,前面给出的是前3个元素的初始值,其他为默认的初始值
- int arr2[]={1,3,5,7,9};// 所有元素都指定了初始值,可以省略掉长度
数组的使用
最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。数组初始化完成后,不能重新对数组本身赋值。如下代码是错误的:
arr={2,3};// 不能对数组本身赋值
objective-c 的数组索引从0开始。
数组下标越界的问题:
如果访问数组元素时,指定的数组元素索引号<0,或者>=数组长度,程序将出现无法预知的错误。因此,要避免数组索引越界的情况出现。
计算数组的长度的方法:
使用 sizeof 函数来计算:sizeof( 数组变量)/sizeof( 数组变量[0])
上面 的公式将返回数组元素的个数。
示例代码:
#import <Foundation/Foundation.h>
int main(int argc , char * argv[])
{
@autoreleasepool{
int len = 5;
// 定义数组,不执行初始化。系统为数组元素指定默认的初始值。
int arr[len];
// 定义数组时,指定长度,并完整地指定了数组的5个元素。
int arr2[5] = {
2, 3, 40 , 300, 100};
// 只指定前面3个数组元素的值,后面2个数组元素默认为0。
int arr3[5] = {
2, 3, 40};
// 数组长度为3。
int arr4[] = {
2, 3 , 40};
// 定义长度为4的指针类型数组,所有数组元素默认为空。
NSDate * arr5[4];
// 定义指针类型的数组,指定每个数组元素的值,系统推断数组长度为3。
char * arr6[] = {
"李刚", "fkjava.org", "crazyit.org"};
// 定义长度为4的数组,后面2个数组元素为空
NSString * arr7[4] = {@"疯狂iOS讲义" , @"疯狂Ajax讲义"};
// 输出arr6数组的第二个元素,将输出字符串"fkjava.org"
NSLog(@"%s" , arr6[1]);
// arr6的第一个数组元素赋值
arr6[0] = "Spring";
// 访问数组元素的索引与数组长度相同,编译器会生成警告,运行的结果是不可预期的。
NSLog(@