在c语言里面 每个变量、指针都有一个类型.
例如:int a;变量a 的类型为int
int *p; 指针变量p的类型为int *;
定义变量的形式:类型名 变量名
那么这个 类型名有什么用呢?
1、能访问内存的大小。
例如一般的在64位的苹果系统中int 占4个字节。
int a,表示a这个变量占4个字节。
所有当访问变量a的时候会访问4个字节。
2、如何解析数据。因为不同类型的数据在内存中的存储形式是不一样的。
例如在内存中有一个数据 000000000000101,如果类型是int 则解析出来的数据为5,若为float类型则解析出来的数据则不一定是5因为不同类型的数据存储的原则是不一样的。
定义一个结构体的过程其实就是在定义一种数据的类型,和int double float 等基本数据类型一样,只是基本数据类型是编译器定义好的,而为了满足描述更多现实中的信息,c语言里面运行我们自己定义自己的类型,因此有了结构体。
实际结构体就是描述对象的性质的集合。
在看一个结构体类型:
定义一个结构体struct student {
int age;
char name;
}
定义的一个结构体实际上是定义了一种数据类型名为struct student 的新类型,我们可以利用它来定义变量、指针等,例如:struct student stu1;struct student *p;
定义了变量stu1,该变量属于struct student类型,则它拥有了该类型里面的age 和name 属性。
在面向对象的语言中,和定义结构体一样定义了类,只是类里面不仅仅包括了属性,还把一些方法也包含进去了。可以将面向对象oc中的类理解为c语言中的结构体类名。
在oc里面定义类的形式为:
@interface 类名:父类
{
变量;
}
方法、属性声明等。
@end
先定义一个类:
@interface Animal :NSObject
{
int age;
nsstring *name;
}
-(void)method;
@end
在oc中定义一个类对象和在c语言里面定义一个结构体变量类似。
struct student stu;描述为定义了一个类型名为struct student 的stu变量。
Animal *dog;描述为定义了一个类为Animal 的dog类对象。
stu 可以拥有并可以访问struct student这种类型里面的变量。
dog 也拥有并可以访问Animal*这种类 里面的实例变量。
切记:在oc中所有的对象都是通过指针的形式来指向的。
在学习oc之前需要深入理解结构体,会对后面oc的学习有很大的帮助。