ObjC学习7-C语言特性
开发中可能需要ObjC和C两种一起使用,再复习下C语言的一些知识.
1.数组
int arr[15],i;
for(i=0;i<15;i++)
{
arr[i] = i;
}
for(i=0;i<15;i++)
{
NSLog(@"%i",arr[i]);
}
一道经典的题目:斐波纳契数
arr[0]=0;
arr[1]=1;
for(i=2;i<15;++i)
{
arr[i] = arr[i-2]+arr[i-1];
}
for(i=0;i<15;i++)
{
NSLog(@"%i",arr[i]);
}
数组初始化:
int intarr[5] = {1,1,2,4,5};
char carr[5]={'c','a','v','n','z'};
int iarr[5] ={1,2};//初始化前两个
int intarr2[]={[9]=1,[1]=2};//最大索引为9 数据长度10 初始化第一个和最后一个
char str[]={'h','i',' ','w','\0'};//后面多了个终止空字符'\0' 字符数组就成了一个字符串
多维数组:
int m[4][4];//多维数组
for(int i =0;i<4;i++)
{
for(int k=0;k<4;k++)
{
m[i][k] = i+k;
}
}
2.函数
void printMsg(void)
{
NSLog(@"hi man");
}
printMsg();//调用
//函数参数
void show (int a)
{
NSLog(@"is %i",a);
}
show(1);
show(2);
3.函数参数
int add(int a,int b)
{
return a+b;
}
调用:
NSLog(@"%i",add(1,2));
4.函数参数带数据及局部变量
int minnum(int arr[],int c)
{
int temp;
temp = arr[0];
for(int i = 1;i<c;i++)
{
if(arr[i]<temp)
{
temp =arr[i];
}
}
return temp;
}
奇了个怪 为啥不返回temp编译器不报错呢= =.执行结果出错才发现没返回temp补上~
5.结构
struct date
{
int month;
int day;
int year;
};
struct date today;
today.month = 5;
today.day = 23;
today.year= 2013;
NSLog(@"Today is %i-%i-%i",today.year,today.month,today.day);
结构的初始化:
struct date td = {7,2,2001};
struct date tdd = {3};
struct date tddd = {.month = 5,.day = 23 ,.year = 2013};
struct date
{
int day;
int month;
}today,pudate;//初始化时明
结构数组:struct date birthday[15];
结构中的结构:
struct date_and_time
{
struct date sdate;
struct date stime;
};
6.指针
int count = 10;
int *intptr;
intptr = &count;
NSLog(@"count = %i,intptr = %i.",count,*intptr);
count = 11;
NSLog(@"count = %i,intptr = %i.",count,*intptr);
*intptr = 12;
NSLog(@"count = %i,intptr = %i.",count,*intptr);
指针变 变量也变。
指针函数结构~
void exchange(int *n1,int *n2)
{
int temp;
temp = *n1;
*n1 = *n2;
*n2 = temp;
}
int i1= 5,i2=10,*p1=&i1,*p2 = &i2;
NSLog(@"i1= %i , i2=%i",i1,i2);
exchange(p1, p2);
NSLog(@"i1= %i , i2=%i",i1,i2);
exchange(&i1, &i2);
NSLog(@"i1= %i , i2=%i",i1,i2);
结果:
2013-05-26 17:48:24.785 Test[8719:c07] i1= 5 , i2=10
2013-05-26 17:48:24.787 Test[8719:c07] i1= 10 , i2=5
2013-05-26 17:48:24.788 Test[8719:c07] i1= 5 , i2=10
指针数组:
//*array
int values[10] ={3,7,-9,3,6,-1,7,9,1,-5};
int sum = 0,*ptr;
int *arrayEnd = values+10;
for(ptr = values;ptr<arrayEnd ;++ptr)
{
sum+=*ptr;
}
NSLog(@"the sum is %i",sum);
结果:
2013-05-26 23:41:12.478 Test[19441:c07] the sum is 21
C下的指针字符串void copyString (char *tc,char *from)
{
for(;*from !='\0';++from,++tc)
{
*tc = *from;
}
*tc='\0';
}
char string1[] ="i am string1";
char string2[50];
copyString(string2, string1);
NSLog(@"%s",string2);
copyString(string2, "change string");
NSLog(@"%s",string2);
结果:
2013-05-27 00:09:13.550 Test[20300:c07] i am string1
2013-05-27 00:09:13.552 Test[20300:c07] change string
指针运算:
指针所允许的唯一操作就是两个相同类型的指针的减法,两指针相减结果就是他们之间所包含的元素个数。
如p指向x中的某个元素:
n= p- x;
n就是数组x中p指向元素的所以你熟
p=&x[99];
那么n的值应该为99
----
函数指针,这个概念有点高级~
int (*fnPtr) (void);这里定义了一个不带参数返回值为int的函数指针
int lookup(void)
fnPtr = lookup;
通过操作指针变量应用函数调用运算符,可以间接应用指针变量引用的函数
entry = fnPtr();
函数指针另一个常见应用时建立分派表,如:可以以数组形式存储函数指针,这样只要用户输入一条命令调用相对应的函数指针操作就行了。
7.联合
再objc中,最不寻常的结果之一就是联合,这种结果主要用在需要在现金共同存储区域存放不同类型数据的更高级编程应用中。
union mixed
{
char c;
float f;
int i;
};
//使用方法和结构类似