动态分配结构体空间并用指针进行操作
要求利用动态内存分配进行结构体指针的内存分配,然后设计函数,计算平均成绩,要求结构体指针作为函数参数,观察值的影响。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student // 定义结构体类型,并声明别名
{
char name[100];
long num;
float grades[5];
float ave;
} STU;
void calc_average(struct Student* p); // 计算某个学生的平均成绩
int main()
{
struct Student *p;
//申请空间
p = (STU*) malloc(sizeof(struct Student)); // 申请动态分配空间
// 为该结构体各成员变量赋值, PS: (*p)的写法以后可替换为p->
(*p).num = 10001;
for (int i = 0; i < 5; i++)
(*p).grades[i] = 80+i;
//(*p).name = "Zhangsan";
strcpy((*p).name, "Zhangsan"); // 字符串只能用strcpy函数进行赋值操作
(*p).ave = 0;
calc_average(p); // 由于传递的是指针,对平均值 的计算将影响原来的值
printf("ave=%f", (*p).ave);
return 0;
}
void calc_average(struct Student* p)
{
int i; float sum;
for (i = 0, sum = 0; i < 5; i++)
{
sum += (*p).grades[i];
}
(*p).ave = sum / 5;
}