结构体和结构体指针的使用方法

1.直接使用结构体修改成员变量和 使用结构体指针修改成员变量有何区别

举例说明:

在C语言中,直接使用结构体修改成员变量和使用结构体指针修改成员变量在语义上是一样的。但是,使用结构体指针修改成员变量时,需要使用解引用操作符(*)。

以下是一个简单的例子来说明这两种方法:

#include <stdio.h>  
  
typedef struct {  
    int x;  
    int y;  
} Point;  
  
int main() {  
    Point point1 = {10, 20};  
    Point point2 = {30, 40};  
      
    // 使用结构体直接修改成员变量  
    point1.x = 50;  
    point1.y = 60;  
    printf("point1: (%d, %d)\n", point1.x, point1.y);  
      
    // 使用结构体指针修改成员变量  
    Point *p = &point2;  
    p->x = 70;  
    p->y = 80;  
    printf("point2: (%d, %d)\n", p->x, p->y);  
      
    return 0;  
}

在这个例子中,我们定义了一个名为Point的结构体,它有两个整数类型的成员变量x和y。在main函数中,我们创建了两个Point类型的变量point1和point2。

首先,我们使用结构体直接修改point1的成员变量。通过直接访问结构体的成员变量,我们可以直接修改它们的值。

然后,我们使用结构体指针修改point2的成员变量。我们创建一个指向point2的指针p,然后通过解引用指针来访问并修改point2的成员变量。在访问结构体的成员变量时,需要使用箭头操作符(->)。

2.使用结构体变量访问成员变量和使用结构体指针访问成员变量

在C语言中,使用结构体访问成员变量有两种常见的方式:直接使用结构体变量访问成员变量和使用结构体指针访问成员变量。

直接使用结构体变量访问成员变量
当你声明一个结构体变量时,你可以使用.运算符来访问结构体中的成员变量。这种方式不需要使用指针,直接通过结构体变量本身来访问成员变量。

c
struct Student {  
    char name[50];  
    int age;  
};  
  
int main() {  
    struct Student student1;  
    strcpy(student1.name, "John");  
    student1.age = 20;  
    printf("Name: %s, Age: %d\n", student1.name, student1.age);  
    return 0;  
}

在上面的例子中,我们声明了一个Student结构体,并在main函数中创建了一个名为student1的结构体变量。然后,我们使用.运算符来访问student1结构体中的成员变量,分别为name和age。

使用结构体指针访问成员变量
当你声明一个结构体指针时,你可以使用箭头运算符(->)来访问结构体指针所指向的结构体中的成员变量。这种方式需要使用指针来间接访问结构体的成员变量。

c
struct Student {  
    char name[50];  
    int age;  
};  
  
int main() {  
    struct Student *ptr = NULL;  
    ptr = (struct Student*)malloc(sizeof(struct Student));  
    if (ptr != NULL) {  
        strcpy(ptr->name, "John");  
        ptr->age = 20;  
        printf("Name: %s, Age: %d\n", ptr->name, ptr->age);  
        free(ptr);  
    } else {  
        printf("Memory allocation failed.\n");  
    }  
    return 0;  
}

在上面的例子中,我们声明了一个指向Student结构体的指针ptr,并使用malloc函数为其分配内存。然后,我们使用箭头运算符(->)来访问指针所指向的结构体中的成员变量,分别为name和age。最后,我们使用free函数释放指针所指向的内存空间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaotianyun88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值