首页 > 编程笔记 > C语言笔记

C语言结构体指针访问结构体成员的2种方法(附带示例)

在C语言中,借助结构体指针,我们可以通过指针来访问结构体的成员。结构体指针访问结构体成员主要有 2 种方法:箭头运算符->和间接成员访问运算符*。这两种方法各有特点,我们将详细探讨它们的使用方法和区别。
 

让我们先定义一个简单的结构体,然后使用这个结构体来演示这两种访问方法:

struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    struct Person person = {"Alice", 25, 165.5};
    struct Person *ptr = &person;

    // 后续示例将使用这个结构体和指针
    return 0;
}

现在,我们来详细讲解这两种访问结构体成员的方法:

1. 箭头运算符(->)

箭头运算符是访问结构体指针成员的最直接和常用的方法,它的语法格式如下:

指针名->成员名

使用箭头运算符时,我们直接用指针名称,后面跟着箭头符号,再接结构体成员名。这种方法简洁明了,使用起来非常方便。让我们看一个具体的例子:

printf("姓名:%s\n", ptr->name);
printf("年龄:%d\n", ptr->age);
printf("身高:%.1f\n", ptr->height);

输出结果:

姓名:Alice
年龄:25
身高:165.5

2. 间接成员访问运算符(*)

间接成员访问运算符方法使用指针的解引用操作,然后通过点运算符访问结构体成员,它的语法格式如下:

(*指针名).成员名

使用这种方法时,我们需要先用括号将指针解引用,然后使用点运算符访问结构体成员。这种方法虽然看起来稍微复杂一些,但它清楚地展示了指针解引用的过程。让我们看一个具体的例子:

printf("姓名:%s\n", (*ptr).name);
printf("年龄:%d\n", (*ptr).age);
printf("身高:%.1f\n", (*ptr).height);

输出结果:

姓名:Alice
年龄:25
身高:165.5

关于两种方法的讨论

这两种方法在功能上是完全等价的,它们都能正确地访问结构体成员,选择使用哪种方法主要取决于个人偏好和代码的可读性。

值得注意的是,在使用这两种方法时,我们都假设指针已经正确地指向了一个有效的结构体。在实际编程中,我们应该始终确保指针不为空,并且指向了正确的内存位置。为了增强代码的健壮性,我们可以在访问结构体成员之前添加空指针检查:

if (ptr != NULL) {
    printf("姓名:%s\n", ptr->name);
    // 或者使用 (*ptr).name
} else {
    printf("错误:指针为空\n");
}

这种检查可以防止程序因为访问空指针而导致的崩溃,提高程序的可靠性和安全性。

相关文章