学到的问题:
1.结构体中定义的类型不一样访问的方式不一样:
结构体定义: 访问方式
指针: 正常
int num; &p->num(由结构体定义决定跟,指针p关系不大) &n[i].num
char name[50]; p->name(数组名就是地址) &n[i].name
int scores[2]; *1 &(p->scores[0])(访问整形数组里具体的位置--索引)&n[i].scores
*1 变量scores[]取地址&进行引用 score数组是地址
*2 p++可相当于行变化,具体访问数组那个位置要确定i的值
s
代码;
#include <stdio.h>
#include <string.h>
struct Student
{
int num;
char name[50];
char gender[20];
int scores[2];
};
int main()
{
struct Student n[2];
struct Student n2;
struct Student max;
struct Student *p;
p=n;//数组名就是地址不用加&
printf("num=%d,scores=%d\n",p->num,p->scores);
for(int i = 0;i<2;i++){
p->num= 0;
memset(p->name ,'\0',sizeof(p->name));
memset(p->gender ,'\0',sizeof(p->gender));
p->scores[0] =0;
printf("初始化;num=%d,scores=%d\n",p->num,p->scores);
printf("请输入第%d名学生的信息:\n",i);
puts("学号:1/2");
scanf("%d",&p->num);//加&:结构体中不是数组或指针,要加&。访问数组要加下标--索引,访问的是变量,num是地址
getchar();
puts("姓名:");
scanf("%s",p->name);
getchar();
puts("性别:男?女");
scanf("%s",p->gender);
getchar();
puts("成绩:");
scanf("%d",&(p->scores[0]));
getchar();
p++;
}
p=n;
for(int i = 0;i<2;i++){
printf("成绩较高的学生信息:学号:%d \n姓名:%s \n性别:%s \n成绩:%d\n"
,p->num,p->name,p->gender,p->scores[0]);
p++;
}
p=n;
max =n[0];
if(n[0].scores[0] < n[1].scores[0]){
max = n[1];
}if(n[0].scores[0] == n[1].scores[0]){
puts("这俩一样优秀");
}
p=n;
if(n[0].scores[0] != n[1].scores[0]){
printf("成绩最·高的学生信息:学号:%d \n姓名:%s \n性别:%s \n成绩:%d \n",max.num,max.name,max.gender,max.scores[0]);
}
return 0;
}
结果: