结构体后面加;的问题

对比这两个程序吧。
第一个
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
struct student
{
long num;
char name[20];
char sex;
float score;
}; //这里为什么要加分号
struct student stu_1;
struct student*p;
p=&stu_1;
stu_1.num=89101;
strcpy(stu_1.name,"Lilin");
stu_1.sex='M';
stu_1.score=89.5;
printf("No.%ld:\nname:%s\nsex:%c\nscore:%f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
system("pause");
return 0;

}

第二个#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct person
{
char name[20];
int count;
} //这里没有加;
leader[3]={"Li",0,"Zhang",0,"Fun",0}; //leader[3]={{"Li",0},{"Zhang",0},{"Fun",0}};//而是在这里加;
int main()
{
int i,j;
char leader_name[20];
for(i=1;i<=10;i++)
{
scanf("%s",leader_name);//另外顺便问一下这里 &可以加 可以不加,等效的?
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
printf("\n");
for(i=0;i<3;i++)
printf("%5s:%d\n",leader[i].name,leader[i].count);
system("pause");
return 0;
}
最新回答
仲夏柠叶香

2025-03-02 07:39:55

第一个只是定义了类型为student的结构体 

第二个这里没有加 是因为 定义了结构体类型为student的结构体数组 ,在定义结构体类型的时候,定义的结构体变量名

scanf("%s",leader_name); 可以写成scanf("%s",&leader_name);

 leader_name是数组的首地址,  &leader_name是数组的地址,两个值是一样的。但意义不一样

p = leader_name ;p++ ;p = leader_name[1];//p指向下一个数组元素
p = &leader_name ;p++;//p指向下一个数组。