繁体   English   中英

如何使用typedef结构

[英]How to use typedef struct

我是C语言的新手,我在使用指针和typedef struct遇到了麻烦。

我定义了两个typedef structStudentClass ,我想知道它们是否是指针:

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定义为指针,但是在_Studenttypedef ,我们将数组Class *classes定义为单个指针数组。

因此,在我的程序中, Student是一个指针,而Class不是。 为什么?

两个typedef struct的定义是相同的,因此何时使用结构作为指针?

谢谢您的回答。

不,类型别名Class (和其他类型) 不是指针类型。 它们只是struct _Class别名。

所以代替(例如)

Student * studentOne;

你可以写

struct _Student * studentOne;

如果您还有_Student结构的类型别名!

根据您的问题,在我看来您不太了解指针和内存分配,因此我将尝试简单地解释一下

学生* studentOne;

可以表现为两件事:

  1. 指向学生的简单指针。 要在堆上分配学生时使用此选项
  2. 一群学生。 对于此选项,您将执行以下操作:

    学生* studentArr =(学生*)malloc(NUM_OF_STUDENTS * sizeof(学生))

如果您不希望学生坐在堆中,则只需创建一个简单的学生变量

Student stud;

如果要在堆栈上放置一个学生数组,则应按以下方式创建它

Student stud[NUM_OF_STUDENTS]

在对应

Student ** studentMat;

可以表现为两件事:

  1. 指向学生的指针数组
  2. 学生矩阵

对于选项一,您可以这样做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM