📜  结构指针(1)

📅  最后修改于: 2023-12-03 14:56:52.090000             🧑  作者: Mango

结构指针

概念

结构指针是指向结构体类型的指针变量,它可以存储结构体变量的地址。

在 C 语言中,结构体是由多个不同类型的成员变量组成的复合类型。结构指针可以通过指针变量访问结构体成员变量,也可以传递结构体变量的地址给函数进行参数传递。

定义

定义结构指针的语法格式如下:

struct person {
    char *name;
    int age;
};

struct person *p;    // 定义一个结构指针变量 p

在上面的例子中,p 是一个指向 person 结构体类型的指针变量。

初始化

定义结构指针后,我们需要为其分配内存空间,然后才能使用。

分配内存空间有两种方式:

  1. 动态分配内存:可以使用 malloc()calloc() 函数动态分配结构体类型的内存空间。
struct person *p;
p = (struct person *) malloc(sizeof(struct person));    // 动态分配内存
  1. 静态分配内存:在定义结构体变量时,直接对其进行初始化,不需要调用 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
}
总结

结构指针是一个非常有用的数据类型,它可以方便地访问和修改结构体变量的成员变量。

在编写程序时,我们可以使用结构指针来传递多个数据,减少函数参数的个数,从而提高代码的可读性和可维护性。