📅  最后修改于: 2023-12-03 14:56:52.090000             🧑  作者: Mango
结构指针是指向结构体类型的指针变量,它可以存储结构体变量的地址。
在 C 语言中,结构体是由多个不同类型的成员变量组成的复合类型。结构指针可以通过指针变量访问结构体成员变量,也可以传递结构体变量的地址给函数进行参数传递。
定义结构指针的语法格式如下:
struct person {
char *name;
int age;
};
struct person *p; // 定义一个结构指针变量 p
在上面的例子中,p 是一个指向 person
结构体类型的指针变量。
定义结构指针后,我们需要为其分配内存空间,然后才能使用。
分配内存空间有两种方式:
malloc()
或 calloc()
函数动态分配结构体类型的内存空间。struct person *p;
p = (struct person *) malloc(sizeof(struct person)); // 动态分配内存
malloc()
或 calloc()
函数。struct person *p;
struct person pp = {"Tom", 20};
p = &pp; // 直接将结构体变量的地址赋值给结构指针变量
访问结构体成员变量时,我们可以使用运算符 ->
或 .
,具体使用哪一个取决于我们是直接对结构体变量进行访问,还是需要通过指针访问结构体变量。
struct person {
char *name;
int age;
};
struct person p1 = {"Tom", 20};
struct person *p2 = &p1;
// 直接访问结构体变量
printf("Name: %s\n", p1.name); // 输出:Name: Tom
// 通过指针访问结构体变量
printf("Age: %d\n", p2->age); // 输出:Age: 20
我们可以将结构体变量的地址作为函数参数进行传递,从而实现在函数内部对结构体变量进行修改的操作。
void change_age(struct person *p, int new_age) {
p->age = new_age;
}
int main() {
struct person p1 = {"Tom", 20};
printf("Before change: Age = %d\n", p1.age); // 输出:Before change: Age = 20
change_age(&p1, 25);
printf("After change: Age = %d\n", p1.age); // 输出:After change: Age = 25
}
结构指针是一个非常有用的数据类型,它可以方便地访问和修改结构体变量的成员变量。
在编写程序时,我们可以使用结构指针来传递多个数据,减少函数参数的个数,从而提高代码的可读性和可维护性。