数组
来源:互联网 发布:大学生旅游的地方知乎 编辑:程序博客网 时间:2024/05/19 14:18
什么是数组?
数组就是相同类型变量按一定顺序排列的集合
int a[10];其中a是什么类型?
a是数组类型 再详细一点说 就是int[10]类型 它表明10个元素是int类型的数组
a中具体有哪些元素?
a[0],a[1],a[2],...,a[9]
从a[0]到a[9],一共10个元素
如果使用a[10]会怎样?
1、编译器会发出警告 提示下标超过数组上限 但是仍旧可以使用数组 如下
int Fibonacii[15],i; Fibonacii[0]=0; Fibonacii[1]=1; for (i=2; i<15; ++i) { Fibonacii[i]=Fibonacii[i-2]+Fibonacii[i-1]; } for (i=0; i<15; ++i) { NSLog(@"Fibonacii[%i]=%i",i,Fibonacii[i]); } Fibonacii[15]=610; NSLog(@"Fibonacii[%i]=%i",i,Fibonacii[15]); Fibonacii[i]=610; NSLog(@"Fibonacii[%i]=%i",i,Fibonacii[i]);
注意这里for循环结束后下标i的值为15 已经超过数组上限 使用Fibonacii[15]会使编译器发出了警告 但是依然可以使用Fibonacii[15]赋值取值 这里使用Fibonacii[i] 编译器就不会发出警告 容易隐藏错误 其实这里的Fibonacii[i]已经不是数组元素了
这里重点说明一下 为什么像a[10]这样下标超过上限的数组可以访问
因为数组存放在计算机连续的内存空间中 比如
a[0] a[1] a[2] a[3] ... a[8] a[9]
XXXX XXXX XXXX XXXX ... XXXX XXXX
计算机要知道变量在内存中的位置 所以记第一个字节的地址 这里a一共占40个字节 由10个int元素组成 a[9]所在的地址XXXX之后还是有内存空间的 a[9]之后4个字节的内存地址 即第41个字节到第44个字节 计算机就认为是a[10] 同理a[100]也是可以访问的 但是这些内存空间是不安全里面的值是未知的 因为我们定义的是a[0]到a[10] 尽管之后数组计算机是认可的
2、如果数组元素是类的实例 并且使用赋值取值 程序直接崩溃 原因是无法识别的方法送入了实例 如下
int j; fracs[0]=[[Fraction alloc] init]; fracs[1]=[[Fraction alloc] init]; [fracs[0] setNumerator:1 andDenominator:2]; [fracs[1] setNumerator:1 andDenominator:3]; for (j=2; j<15; ++j) { fracs[j]=[fracs[j-2] add:fracs[j-1]]; } for (j=0; j<15; ++j) { NSLog(@"fracs[%i]=%i/%i",j,fracs[j].numerator,fracs[j].denominator); } fracs[i]=610; NSLog(@"fracs[%i]=%i",j,fracs[j]); [fracs[j] setNumerator:1 andDenominator:2]; NSLog(@"fracs[%i]=%i/%i",j,fracs[j].numerator,fracs[j].denominator);这里for循环结束后下标i的值也超过了数组上限 只是使用fracs[j]作为普通类型操作 编译器会警告报错 但是如果作为类的实例去做赋值取值操作 程序就会崩溃
数组初始化
我们知道数组初始化有完全初始化和部分初始化 下面这种是部分初始化中的特殊情况 数组清零
int a[10]={};数组中的所有元素全部设置为0
数组赋值
数组不能整体赋值 只能给数组的每个元素分别赋值
int a[5];
a={0,1,2,3,4};是错误的 包括下面这种也是整体赋值
int b[5];
b=a;
sizeof()可以对类型或对象使用 返回字节大小 如下
NSLog(@"%li",sizeof(int)); NSLog(@"%li",sizeof(short)); NSLog(@"%li",sizeof(long)); NSLog(@"%li",sizeof(long long)); NSLog(@"%li",sizeof(float)); NSLog(@"%li",sizeof(double)); NSLog(@"%li",sizeof(long double)); NSLog(@"%li",sizeof(char)); NSLog(@"%li",sizeof(NSString *)); NSLog(@"%li",sizeof(BOOL)); NSLog(@"%li",sizeof(enum direction)); NSLog(@"%li",sizeof(int[3][4])); NSLog(@"%li",sizeof(n)/sizeof(n[0][0])); NSLog(@"%li",sizeof(n)/sizeof(i)); NSLog(@"%li",sizeof(Fraction *)); Fraction *frac=[[Fraction alloc] init]; NSLog(@"%li",sizeof(frac));
2015-04-16 17:32:25.650 Array[1309:303] 42015-04-16 17:32:25.651 Array[1309:303] 22015-04-16 17:32:25.652 Array[1309:303] 82015-04-16 17:32:25.653 Array[1309:303] 82015-04-16 17:32:25.653 Array[1309:303] 42015-04-16 17:32:25.654 Array[1309:303] 82015-04-16 17:32:25.654 Array[1309:303] 162015-04-16 17:32:25.655 Array[1309:303] 12015-04-16 17:32:25.655 Array[1309:303] 82015-04-16 17:32:25.656 Array[1309:303] 12015-04-16 17:32:25.656 Array[1309:303] 42015-04-16 17:32:25.657 Array[1309:303] 482015-04-16 17:32:25.658 Array[1309:303] 122015-04-16 17:32:25.658 Array[1309:303] 122015-04-16 17:32:25.659 Array[1309:303] 82015-04-16 17:32:25.660 Array[1309:303] 8
long long类型字节大小是8 指针类型都是8 枚举类型是4
这点需要注意 数组可以通过sizeof()求出数组中有多少个元素 sizeof(数组变量)/sizeof(数组元素)或者sizeof(数组变量)/sizeof(变量)C字符串%s和字符串结束符'\0' 如下
char g[]={'a','b','c','d','e','f','g','h','i','j','\0'}; printf("%s\n",g);
C语言中没有字符串类型 但是提供了输入输出字符串%s 就是将字符整串输入输出 而在字符数组结尾加上字符串结束符就产生了字符串 '\0'本身占一个字符 上面字符数组有11个元素 即使不加 只要是以字符串输入输出系统也会自动加上 结果为abcdefghij
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- bat中echo 和 @echo有何区别?
- 这是一篇测试
- 一例硬盘逻辑坏道修复案例
- python defaultdict
- iOS开发常用的RGB色值
- 数组
- Java Message Servicec - ActiveMQ
- windows C++ 用信号量控制线程
- SQL删除重复数据方法
- Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框 【不定期更新】
- leetcode || 46、Permutations
- C#操作Excel文件(读取Excel,写入Excel)
- 目标跟踪综述
- android5.0充电驱动学习