
已经是结构体指针了,还可以继续这样使用吗这是啥意思,星号符平台输不出来,只能再发一遍了
关注引自免费微信小程序:皆我百晓生
在C语言中,typedef 是一种类型定义,它允许你创建一个新的类型名称作为已存在的类型的别名。在这个例子中,typedef struct Student { int a; } *pStu; 定义了一个新的类型 pStu,它是 struct Student 结构体的指针。
这意味着当你声明一个变量为 pStu 类型时,实际上你是在声明一个指向 struct Student 结构体的指针。例如:
typedef struct Student{
int a;
} Student;
typedef Student* pStu; // 等同于 "typedef struct Student* pStu"
pStu s; // 这里声明了一个名为 s 的指针,它指向一个 Student 结构体
当你说 "已经是结构体指针了,还可以继续这样使用吗" 时,可能你在问是否可以对这样的指针进行更多的操作。答案是肯定的。一旦你有了一个 pStu 类型的变量(比如 s),你可以执行以下操作:
malloc() 或者数组声明来分配空间。-> 来访问结构体中的成员。* 来获取指针所指向的结构体实例。这里是一个完整的示例,展示如何使用 pStu 类型的指针:
#include <stdio.h>
#include <stdlib.h>
typedef struct Student {
int a;
};
typedef struct Student* pStu;
int main() {
// 分配内存
pStu s = malloc(sizeof(Student));
// 初始化结构体成员
s->a = 42;
// 打印结构体成员
printf("Student's a: %d\n", s->a);
// 赋值
pStu anotherStudent = s;
// 解引用并打印
printf("Another student's a: %d\n", *anotherStudent->a); // 注意这里的两个星号,因为我们需要解两次引用
// 释放内存
free(s);
return 0;
}
这段代码首先定义了一个 Student 结构体和其指针类型 pStu。接着,在 main() 函数中,我们创建了一个 pStu 类型的变量 s 并为其分配了内存。随后,我们设置了 s 指向的结构体的 a 成员,并进行了输出。接下来,我们将 s 的值赋给了 anotherStudent,最后通过解引用展示了如何访问 anotherStudent 中的 a 成员。注意,这里有两个星号是因为我们需要先解引用 anotherStudent 得到结构体实例,然后再解引用得到 a 成员。最后,我们释放了之前分配给 s 的内存。