一、定义结构体类型变量的方法
定义一个结构的一般形式为:
struct 结构名
{
成员表列
};
成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:
类型说明符 成员名;
可以采取以下3种方法定义结构体类型变量:
(1)先声明结构体类型再定义变量名
例如:struct student student1, student2;
| | | |
类型名 结构体 变量名 变量名
定义了student1和student2为struct student类型的变量,即它们具有struct student类型的结构.
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
} student1, student2
在定义了结构体变量后,系统会为之分配内存单元。
(2)在声明类型的同时定义变量
这种形式的定义的一般形式为:
struct 结构体名
{
成员表列
}变量名表列;
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1,student2;
(3) 直接定义结构体类型变量
其一般形式为:
struct
{
成员表列
}变量名表列;
即不出现结构体名。
#include<stdio.h>
void main()
{
struct sutdent
{
int nun;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct sutdent sutdent1;
struct sutdent sutdent2;
printf("%lu\n", sizeof(sutdent));
}
二、结构体变量的引用
结构体变量名.成员名
#if 1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void main()
{
#if 0
struct date
{
int month;
int day;
int year;
};
#endif
struct student
{
int num;
char *name;
char sex;
//struct date birthday;
float score;
} boy1, boy2;
boy1.num = 007;
boy1.name = "Jane";
printf("Please input sex and score\n");
scanf("%c %f", &boy1.sex, &boy1.score);
boy2 = boy1;
printf("Number =%d\nName = %s\n", boy2.num, boy2.name);
printf("Sex = %c\nScore = %f\n", boy2.sex, boy2.score);
}
#endif
student1.num
student1.birthday.month
student2.score = student1.score;
sum = student1.score + student2.score;
student1.age++;
++student2.age;
#if 0
#include <stdio.h>
void main()
{
struct student
{
int num;
char *name;
char sex;
float score;
} boy1;
boy1.num = 007;
boy1.name = "Jane";
printf("The address of struct is %o :\n", &boy1 );
printf("The address of num is %o :\n", &boy1.num );
}
#endif
scanf(″%d,%s,%c,%d,%f,%s″,&student1);
#if 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main()
{
struct date
{
int month;
int day;
int year;
};
struct student
{
int num;
char* name;
char sex;
float score;
struct date brithday;
};
struct student boy1;
struct student boy2;
printf("Please input brithday (YY:)");
scanf("%d", &boy1.brithday.year);
printf("Please input brithday (MM:)");
scanf("%d", &boy1.brithday.month);
printf("Please input brithday (DD:)");
scanf("%d", &boy1.brithday.day);
boy2 = boy1;
printf("boy1's brithday is %d-%d-%d\n", boy1.brithday.year, boy1.brithday.month, boy1.brithday.day);
printf("boy2's brithday is %d-%d-%d\n", boy2.brithday.year, boy2.brithday.month, boy2.brithday.day);
#endif
}
Please input brithday (YY:)2022
Please input brithday (MM:)03
Please input brithday (DD:)02
boy1's brithday is 2022-3-2
boy2's brithday is 2022-3-2
结构体变量的引用
结构体变量名.成员名
(2) 如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。
(3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。
(4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
#if 0
#include <stdio.h>
void main()
{
struct student
{
int num;
char *name;
char sex;
float score;
} boy1;
boy1.num = 007;
boy1.name = "Jane";
printf("The address of struct is %o :\n", &boy1 );
printf("The address of num is %o :\n", &boy1.num );
}
#endif