oc基础学习笔记—数组及相关
1. 数组的定义
类型 数组名 [长度]
int myintArray[5]
2. 初始化数组
int myintArray[]={11,22,2,33,4,55,66,77,88,99,87};
//或
myintArray[1]=0;
3. 数组长度的获取
int myintArray[5]
sizeof(myintArray)
sizeof只能反映数组占据的字节数,如果需要知道数组的长度要需要用这个字节数除以数据类型所占据的字节数,如int为4个字节,所以真正的长度应该是
sizeof(sizeof(myintArray))/4
int myintArray[]={11,22,2,33,4,55,66,77,88,99,87};
for(int i=0,length=sizeof(myintArray)/sizeof(myintArray[0]); i<length;i++){
NSLog(@"%i",myintArray[i]);
}
}
4. 二维数组的使用(嵌套遍历及二维数组长度的获取)
int main(int argc, const char * argv[]) {
@autoreleasepool {
int my2d[2][3]={{1,3,5},{2,4,6}};
for (int i=0,length=sizeof(my2d)/sizeof(my2d[0]); i<length; i++) {
for (int j=0,length2=sizeof(my2d[i])/sizeof(my2d[i][0]); j<length2; j++) {
printf("my2d[%i][%i]=%i\t",i,j,my2d[i][j]);
}
}
}
return 0;
}
5. 创建返回类型为NSString类型的函数及函数的调用
NSString *sayhi(NSString *words){
return words;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"answer is %@",sayhi(@"hello word"));
}
return 0;
}
例2
NSString *sayhi(NSString *words,NSString *emotion){
return [NSString stringWithFormat:@"say the words %@ with %@",words,emotion];
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"answer is %@",sayhi(@"hello word",@"haha"));
}
return 0;
}
6. 调用其他文件(oc)的函数
1、创建oc文件NSString+fun.h及NSString+fun.m文件(.h文件用于声明,.m文件用于实现)
#import "NSString+fun.h"
@interface NSString (fun)//可以看到,这里是接口,所以需要再m文件中实现这个接口
int domax(int a,int b);
@end
2.在NSString+fun.m文件中实现.h文件的接口
#import "NSString+fun.h"
@implementation NSString (fun)
int domax(int a,int b){
return a>b? a:b;
}
@end
3、在main函数中引用这个函数
#import "NSString+fun.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"answer is %i",domax(4, 200));
}
return 0;
}
7. 形参的值传递
void change(int a,int b){
NSLog(@"inner befor is %i,%i",a,b);
int temp=a;
a=b;
b=temp;
NSLog(@"inner after is %i,%i",a,b);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a=5,b=9;
NSLog(@"out befor is %i,%i",a,b);
change(a,b);
NSLog(@"out after is %i,%i",a,b);
}
return 0;
}
打印结果如下
out befor is 5,9
inner befor is 5,9
nner after is 9,5
out after is 5,9
8. 指针作为参数
@interface DataWrap:NSObject//声明一个借口
@property int a,b;
@end
@implementation DataWrap//实现这个接口
@synthesize a,b;//合成a、b两个属性
@end
void swap(DataWrap *dw){
NSLog(@"inner change before a=%i,b=%i",dw.a,dw.b);
int temp=dw.a;
dw.a=dw.b;
dw.b=temp;
NSLog(@"inner change after a=%i,b=%i",dw.a,dw.b);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
DataWrap *mydw=[[DataWrap alloc]init];
mydw.a=6;
mydw.b=9;
NSLog(@"outer change before a=%i,b=%i",mydw.a,mydw.b);
swap(mydw);
NSLog(@"outer change after a=%i,b=%i",mydw.a,mydw.b);
}
return 0;
}
9. 数组做参数
int minvalue(int arrayint[]){
int minval=arrayint[0];
for (int i=0,length=sizeof(arrayint)/sizeof(arrayint[0]); i<length;i++) {
if(arrayint[i]<minval){
minval=arrayint[i];
}
}
return minval;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
int myarray[]={32,564,64,36,78};
int mymin=minvalue(myarray);
NSLog(@"the minvalue is %i",mymin);
}
return 0;
}
10. 使用块变量及块
块需要赋值给块变量才能够使用
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (^printsm)(void)=^(void){
NSLog(@"here is somthing to print");
};
int (^result)(int,int)=^int (int a,int b){
return a-b;
};
printsm();
NSLog(@"a jian b =%i",result(33,55));
}
return 0;
}