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函数释放指针所指向的内存空间。