在本程序中易错点:在动态构造结构体一维数组时,此时,该结构的结构体数组名就是地址,在传递函数的时候直接将数组传递输入输出和排序函数处理就可以了,传递过程中形参指向了结构体数组的首地址,也是数组名,相当于st和pArr指向了同一数组,然后对动态构造的一维数组就可以通过st[i].成员进行取出结构体数组的成员变量,进行操作。
提示:随便拿结构体中age成员说明 被调函数的st[i].age等价于主函数pArr[i] 在被调函数中st[i].age等价于*(st+i) 也等价于st->age 就像我们说的如果int* p;int a[5]; p= a; 此时就产生关系a[i]等价于*(p+i) 只不过在本程序中这个数组是个复杂结构体一维数组,因此,就有 通过运算符(.)和(->)取出结构体的内容(内容:成员,结构体内的一些普通变量) (.)运算:结构体数组名[下标].成员名 (->)运算:指针变量名.成员名
还有一个malloc函数的使用:(74条消息) C语言指针之二malloc的用法及详解_malloc函数_修炼之路的博客-CSDN博客
点运算符(.)用于结构体变量访问成员,如石st[i].age
箭头运算符(->)用于结构体指针变量访问成员 ,如:st->age
(74条消息) C/C++语言中点运算符(.)和箭头运算符(->)的区别(代码展示)_c++点运算符_Elsa~的博客-CSDN博客
# include
# include
/*
2023年6月22日15:42:16
提示:随便拿结构体中age成员说明
被调函数的st[i].age等价于主函数pArr[i]
在被调函数中st[i].age等价于*(st+i) 也等价于st->age
就像我们说的如果int* p;int a[5]; p= a; 此时就产生关系a[i]等价于*(p+i)
只不过在本程序中这个数组是个复杂结构体一维数组,因此,就有
通过运算符(.)和(->)取出结构体的内容(内容:成员,结构体内的一些普通变量)
(.)运算:结构体数组名[下标].成员名
(->)运算:指针变量名.成员名
*/
//声明结构体类型
struct Student
{
char name[100]; //学生姓名
int age; //学生年龄
float score; //学生分数
};
//用户的输入
void InputStudent(struct Student* st, int len)
{
for(int i=0; i |