[英]How to use typedef struct
我是C语言的新手,我在使用指针和typedef struct
遇到了麻烦。
我定义了两个typedef struct
: Student
和Class
,我想知道它们是否是指针:
typedef struct _Class {
char name;
int grade;
} Class;
typedef struct _Student {
int number;
Class *classes;
} Student;
int main() {
Student **students = (Student**) malloc(100 * sizeof(Student*));
Student * studentOne;
(*studentOne).number = 453;
}
这只是程序的一部分,但我的问题是:为什么我们将students
数组定义为双指针,而Student *studentOne
定义为指针,但是在_Student
的typedef
,我们将数组Class *classes
定义为单个指针数组。
因此,在我的程序中, Student
是一个指针,而Class
不是。 为什么?
两个typedef struct
的定义是相同的,因此何时使用结构作为指针?
谢谢您的回答。
不,类型别名Class
(和其他类型) 不是指针类型。 它们只是struct _Class
别名。
所以代替(例如)
Student * studentOne;
你可以写
struct _Student * studentOne;
如果您还有_Student
结构的类型别名!
根据您的问题,在我看来您不太了解指针和内存分配,因此我将尝试简单地解释一下
学生* studentOne;
可以表现为两件事:
一群学生。 对于此选项,您将执行以下操作:
学生* studentArr =(学生*)malloc(NUM_OF_STUDENTS * sizeof(学生))
如果您不希望学生坐在堆中,则只需创建一个简单的学生变量
Student stud;
如果要在堆栈上放置一个学生数组,则应按以下方式创建它
Student stud[NUM_OF_STUDENTS]
在对应
Student ** studentMat;
可以表现为两件事:
对于选项一,您可以这样做:
Student ** studentPtrArr = (Student**)malloc(NUM_OF_STUDENTS * sizeof(Student*))
for(int i=0; i < NUM_OF_STUDENTS; i++){
Student[i] = (Student *)malloc(sizeof(Student))
}
对于选项二,您可以这样做:
Student ** studentPtrArr = (Student**)malloc(NUM_OF_STUDENT_ROWS * sizeof(Student*))
for(int i=0; i < NUM_OF_STUDENTS; i++){
Student[i] = (Student *)malloc(NUM_OF_STUDENT_COLUMNS sizeof(Student))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.