结构体的两种定义方法
方法1
定义一个结构体:
struct Name
{
int temp1;
float temp2;
};
1.1、定义一个结构体变量:
struct Name name;
1.2 、定义一个结构体变量:
struct Name
{
int temp1;
float temp2;
}name;
效果相当于 struct Name name; 只不过是在定义结构体的时候顺便把结构体变量也定义了。但如果还想再定义另外一个结构体变量,还是得用方式一的方法操作一遍。
struct Name name2;
也就是说,采用了这种定义方法,struct Name就绑定在一起,成为一个新的变量了。我们不妨把struct Name理解成一个种新变量,和int,char这些一样。
方法2
定义一个结构体(常用):
typedef struct
{
int temp1;
float temp2;
}Name;
2.1、定义一个结构体变量(常用):
Name name;
2.2、定义一个结构体变量:
typedef struct
{
int temp1;
float temp2;
}Name;name;
效果相当于 Name name,此处相当于用关键字typedef给该结构体取了一个别名Name。
此外,指针和结构体也经常结合使用,我们用2.1的方式(下同)来定义一个结构体变量指针。
Name *name;
结构体的成员的初始化与访问
无论是初始化,还是访问结构体成员,都用符号’.'。
Name name;
name.temp1 = 5;
而当定义为一个结构体指针时候,再次访问成员需要用到’->‘符号。
Name *name;
name->temp1 = 5;
即
(*name).temp1 = name->temp1;
应用举例
#include <stdio.h>
typedef struct
{
char name[20];
int age;
float score;
}student;
void show_information(student* p);
void show_information(student* p)
{
printf("The student's name is: %s \n",p->name);
printf("The student's age is: %d \n", p->age);
printf("The student's score is: %f \n", p->score);
}
int main()
{
student p;
printf("Please enter the student's name:");
scanf("%s",p.name);
printf("Please enter the student's age: ");
scanf("%d", &p.age);
printf("Please enter the student's score: ");
scanf("%f", &p.score);
show_information(&p);
return 0;
}