c语言的结构体
声明结构体方式
struct _person{
int age;
char name[30];
};
struct _person{
int age;
char name[30];
}liming;
typedef struct _person{
int age;
char name[30];
}Person;
结构体初始化三种方式
typedef struct _person
{
int age;
char name[30];
}person;
int main()
{
person person1={.age=10,.name="qwe"};
person person2={12,"asd"};
person2=person1;
}
结构体数组
typedef struct _person
{
int age;
char name[30];
}Person;
int main()
{
Person person[10];
person[0].age=1;
strcpy(person[1].name,"asd");
结构体嵌套结构体
typedef struct _student
{
int grade;
int id;
}Student;
typedef struct _person
{
int age;
char name[30];
Student student;
}Person;
int main()
{
Person person={
3,
"asd",
{3,1001}
};
}
指向结构体的指针
typedef struct _person
{
int age;
char name[30];
}person;
int main()
{
person person1={.age=10,.name="qwe"};
person *person2=&person1;
printf("%d,%s",(*person2).age,person2->name);
指向结构体数组
person p[2]={
{.age=10,.name="qwe"},
{.age=11,.name="asd"}
};
person *p2=p;
for (int i = 0; i <2 ; ++i) {
printf("%d,%s",(p+i)->age,(p+i)->name);
printf("\n");
}
}
向函数传递结构 参数是指针
typedef struct _person
{
int age;
int money1;
int money2;
int total;
char name[30];
}person;
void add_money(person *person1)
{
person1->total=person1->money1+person1->money2;
}
int main()
{
person person1={
12,
1000,
2000,
0,
"asd"
};
add_money(&person1);
printf("%d",person1.total);
}
向函数传递结构 参数是结构变量
double add_money(person person1)
{
return person1.money1+person1.money2;
}
int main()
{
person person1={
12,
1000,
2000,
0,
"asd"
};
person1.total=add_money(person1);
printf("%d",person1.total);
}
结构体中的数组和指针
struct names{
char first[20];
char last[20];
};
struct pnames{
char *first;
char *last;
};
int main(){
struct names names1={"a1","b1"};
struct pnames names2={"a2","b2"};
printf("%s,%s\t",names1.first,names1.last);
printf("%s,%s\t",names2.first,names2.last);
names2.first=malloc(sizeof(char)*20);
strcpy(names2.first,"asd");
}