C中的结构体,对应JAVA中的类的概念。也就是一些数据结构的集合,形成一种新的数据结构。
见一个例子
struct Man{
char* name;
int age;
int(*func)();
};
void main(){
//struct Man m1 = {"jack",21};
struct Man m1;
m1.name = "watson";
m1.age = 23;
printf("%s",m1.name);
system("pause");
}
用struct来创建一个结构体,结构体中,可以是指针,可以是基本类型,也可以是函数,在main中,有两种方式可以给结构体赋值,一般用第二种,比较通顺。第一种有点JS有意思。
一些简写:
struct Man{
char* name;
int age;
}m1;
void main(){
m1.name = "watson";
m1.age = 23;
printf("%s",m1.name);
system("pause");
}
也就是说,在结构体的申明的时候,直接给了一个变量m1,这个m1,就相当于是一个实例了。可以直接用!
struct Man{
char* name;
int age;
}m1,m2={"jack",20}
void main(){
m1.name = "watson";
m1.age = 23;
printf("%s",m1.name);
system("pause");
}
这种写法,就是在申明的时候,同时申明了两个变明量m1,m2,m2在申明的时候直接赋值了。
还有一种写法,匿名结构体
struct{
char* name;
int age;
int(*func)();
}m1;
void main(){
m1.name = "watson";
m1.age = 23;
printf("%s",m1.name);
system("pause");
}
即是根据变量名来用! 就相当于,只有m1可以用。这样写可以有效的控制变量的个数。相当于单例
再来一种,就是结构体里,包含结构体--其实就是JAVA里的,实体类里又含有另外的实体类,一样的东西
struct{
char* name;
int age;
struct Teacher {
char name[20];
}t;
}m1;
void main(){
m1.name = "watson";
m1.age = 23;
strcpy(m1.t.name,"json");
printf("%s",m1.name);
system("pause");
}
就说一点,这里的结构体中,直接是用char name[20]; 如果是这样写,而不是写在char *name的话,赋值就要麻烦点,就要用 strcpy(m1.t.name,"json"); 来完成赋值
现在讲讲结构体指针
例子如下
struct Student{
char* name;
int age;
};
void main(){
struct Student m1;
m1.name = "watson";
m1.age = 23;
strcpy(m1.t.name,"json");
struct Student *p = &m1;
printf(p->name);
system("pause");
}
关键如下 struct Student *p = &m1; 先申明一个指针,然后将对象的对址赋值
这样就可以直接 p->name 来获得值,是不是很方便宜?
当然,也可以 (*p).name 来获得值,也是没问题的,和以前讲的一个逻辑。