7.1 结构体基础知识
7.1.1 结构体类型的定义
struct Person
{
char name[64];
int age;
};
typedef struct _PERSON
{
char name[64];
int age;
}Person;
注意:定义结构体类型时不要直接给成员赋值,结构体只是一个类型,编译器还没有为其分配空间,只有根据其类型定义变量时,才分配空间,有空间后才能赋值。
7.1.2 结构体变量的定义
struct Person
{
char name[64];
int age;
}p1; //定义类型同时定义变量
struct
{
char name[64];
int age;
}p2; //定义类型同时定义变量
struct Person p3; //通过类型直接定义
7.1.3 结构体变量的初始化
struct Person
{
char name[64];
int age;
}p1 = {"john",10}; //定义类型同时初始化变量
struct
{
char name[64];
int age;
}p2 = {"Obama",30}; //定义类型同时初始化变量
struct Person p3 = {"Edward",33}; //通过类型直接定义
7.1.4 结构体成员的使用
struct Person
{
char name[64];
int age;
};
void test()
{
struct Person p1; //在栈上分配空间
strcpy(p1.name, "John");
p1.age = 30;
printf("%s %d\n", p1.name, p1.age); //如果是普通变量,通过点运算符操作结构体成员
//在堆上分配空间
struct Person* p2 = (struct Person*)malloc(sizeof(struct Person));
strcpy(p2->name, "Obama");
p2->age = 33;
printf("%s %d\n", p2->name, p2->age); //如果是指针变量,通过->操作结构体成员
}
输出结果
John 30
Obama 33
7.1.5结构体赋值
7.1.5.1 赋值基本概念
相同的两个结构体变量可以相互赋值,把一个结构体变量的值拷贝给另一个结构体,这两个变量还是两个独立的变量。
struct Person
{
char name[64];
int age;
};
void test()
{
//在栈上分配空间
struct Person p1 = { "John" , 30};
struct Person p2 = { "Obama", 33 };
printf("%s %d\n", p1.name, p1.age);
printf("%s %d\n", p2.name,