struct student 不完整是什么意思
时间: 2023-10-25 09:07:11 浏览: 28
在C++中,当我们声明一个结构体(struct)时,可以只声明它的名称而不定义其成员变量。这样的结构体被称为不完整类型。不完整类型不能直接被实例化,因为编译器无法确定其占用的内存大小。只有在定义该类型的同时,才能够使用它的实例。如果我们试图在不完整类型上定义变量或者使用该类型的成员函数,编译器会报错。通常情况下,不完整类型的声明会放在头文件中,而定义则会放在源文件中。
相关问题
C语言struct student *creat()表示什么意思
`struct student *creat()` 是一个函数声明,它表示一个返回类型为 `struct student *` 的函数名为 `creat`。在C语言中,函数名后面的括号中可以包含函数的参数列表,但是在这个声明中,括号中没有参数,因此这是一个不带参数的函数声明。
这个函数声明表示 `creat` 函数会返回一个指向 `struct student` 类型的指针。通常情况下,`creat` 函数的作用是创建一个 `struct student` 类型的对象,并返回指向该对象的指针。在函数体内部,可以通过动态内存分配函数(如 `malloc`)来申请一块内存来存储 `struct student` 对象,并初始化该对象的成员变量。
例如,下面的示例代码定义了一个 `struct student` 结构体,然后定义了一个名为 `creat` 的函数,该函数会动态分配内存来创建一个 `struct student` 对象,并返回指向该对象的指针:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
int id;
char name[20];
};
struct student *creat() {
struct student *p = (struct student *) malloc(sizeof(struct student));
p->id = 1001;
strcpy(p->name, "Tom");
return p;
}
int main() {
struct student *s = creat();
printf("ID:%d\n", s->id);
printf("Name:%s\n", s->name);
free(s); // 释放动态分配的内存
return 0;
}
```
程序输出:
```
ID:1001
Name:Tom
```
这里的 `creat` 函数返回了一个指向动态分配的 `struct student` 对象的指针,然后在 `main` 函数中调用该函数,并使用返回的指针访问 `struct student` 对象的成员变量。最后,记得释放动态分配的内存。
struct Student
`struct Student` 是一个自定义的结构体类型,它包含了学生的一些基本信息,例如学号、姓名、性别、年龄、生日和地址等。可以通过以下方式定义一个 `struct Student` 类型的变量:
```c
struct Student {
int num;
char name[20];
char sex;
int age;
struct Date birthday;
char addr[30];
};
struct Student stu1; // 定义一个结构体类型的变量stu1
```
其中,`num` 表示学号,`name` 表示姓名,`sex` 表示性别,`age` 表示年龄,`birthday` 表示生日,`addr` 表示地址。可以通过点号 `.` 来访问结构体变量中的成员,例如:
```c
stu1.num = 1001;
strcpy(stu1.name, "张三");
stu1.sex = 'M';
stu1.age = 20;
stu1.birthday.month = 1;
stu1.birthday.day = 1;
stu1.birthday.year = 2000;
strcpy(stu1.addr, "北京市海淀区");
```
这样就可以给 `stu1` 变量赋值了。另外,结构体类型的变量也可以通过指针来访问,例如:
```c
struct Student *p;
p = &stu1;
p->num = 1002;
strcpy(p->name, "李四");
p->sex = 'F';
p->age = 21;
p->birthday.month = 2;
p->birthday.day = 2;
p->birthday.year = 2001;
strcpy(p->addr, "北京市朝阳区");
```
这样就可以通过指针 `p` 来访问 `stu1` 变量中的成员了。需要注意的是,结构体类型的变量在定义时需要先定义结构体类型,然后再定义变量。