一、定义
我认为结构体就是可以让你定义新类型的一个接口。初学者经常说什么结构体类型什么的
其实都是错的,当你定义一个新的类型时这个类型的名字就是你自己起的名字(所以不要再
讲结构体类型了,之前我也犯过这样的错)。
二、使用
1、定义一个结构体(在使用结构体时我建议和typedef一起使用)
typedef struct Teacher
{
int age ;
char name[10];
}Teacher;
这个时候Teacher就和int,char一样,可以用来定义变量,指针,函数例如Teacher A;
Teacher *p = NULL等。
那为什么要和typedef一起用那?
不想写struct,哈哈。
比较一下当你没用typedef时,你定义变量是这样的 struct Teacher a;总之就是方便
使用和理解。
2、结构体的使用
接着上面讲,来说说没有用typedef时结构体的使用,定义新类型
struct Teacher
{
int age ;
char name[10];
};
定义一个Teacher类型的变量struct Teacher A;
对A进行赋值有两种
(1)、第一种,在定义时直接赋值
struct Teacher A = {20,"lucifer"};
(2)、第二种,定义完然后赋值
struct Teacher A;
A.age = 20;
strcpy(a.name,"lucifer");
3、讲讲结构体指针的使用
Teacher *p = NULL;
p = &A;
p->age = 20;
strcpy( p->name,"lucifer");
这里->这个符号是结构体指针专用的相当于(*p).可能也是为了书写方便。
三、结构体的特殊用法
大家都知道在结构体里面是不能调用函数的,但是却是可以调用函数指针的那么这
也就意味着c语言也可以面向对象,此时struct可以认为是c++里面的class但是和
class不同的是它的所有变量全是public。
例子
typedef struct Teacher
{
int age ;
char name[10];
void (*t)(struct Teacher *p);
}Teacher;
void fuction(Teacher *p){
p->age = 30;
}
int main(){
Teacher a;
Teacher *p = &a;
a.t= fuction;
a.t(p);
printf("%d",a.age );
}
通过函数来修改类age的值
!欢迎大家指出不足之处