结构体
是一种构造数据类型,将不同数据了类型结合起来成为自定义的数据类型
struct Man m = {"name",20};
// 只能在申明的时候赋值
m = {"age",20} XXX
几种写法:
1.申明结构体的时候预先定义了一个全局变量
struct Man{
char* name;
int age;
} m1,m2={"ch",20};
2.匿名结构体(控制结构体变量的个数,相当于单例)
struct {
char * name;
int age;
}m1,m2;
3.结构体嵌套
struct Teacher {
char* name;
int age;
};
struct student {
char* name;
int age;
struct Teacher t;
}
//结构体与指针
struct Man{
char* name;
int age;
}
void main() {
struct Man m1 = {"ch",20};
struct Man* p = &m1;
printf("%s",(*p).name);
printf("%s",p->name);
// 结构体数组的遍历
struct Man m2 = {{"jack",20},{"rose",19}};
struct Man *p = m2;
for(;p<m2+2;p++) {
printf("%s",p->name);
}
int i = 0;
for(;i<sizeof(m2)/sizeof(struct Man);i++) {
printf("%s",m2[i].name);
}
// 动态分配结构体数组的遍历
struct Man *p = (struct Man)malloc(sizeof(struct Man)*10);
.....
free(p);
}
注意:结构体变量的大小,必须是最大基本数据类型的整数倍,来提升读取的效率
别名:typedef
不同的别名,不同的实现(JNI中,C和C++有不同的写法)
方便代码可读性
//结构体函数指针
typedef struct Girl {
char* name;
int age;
void(*hello)(char* hello);
}GirlType;
该结构体类似于java中的类,name,age代码属性,hello代表方法
// 结构体的指针别名
typedef struct Girl* Girlp;
void sayHello(char* text) {
printf("%s",text);
}
void main() {
GirlType girl;
girl.name = "lucy";
girl.age = 10;
girl.hello = sayHello;
// 调用
girl.hello("helllo");
Girlp p = &girl;
p->helllo("Girlp");
}