相关定义
结构体是一种复合类型
复合性:
- 结构体单元可以存储不同类型的数据
是一种自定义类型
使用
定义类型 → 通过类型分配结构体单元 → 使用单元
声明结构体类型
struct 结构体名 {
数据类型 成员1;
数据类型 成员2;
...
};
说明
该定义为类型定义
类型名
struct 结构体名
struct stu { int x; double y; char z; };
- 占用空间大小(数据对齐原则) ## 通过类型声明变量 - `struct 结构体名 变量` 例: ```c struct Stu s1, s2;
通过结构体变量引用分量成员
结构体变量名.成员名
成员运算符
- 运算符:
.
- 优先级:同
[]
、->
- 运算符:
例:
s1.x = 3;
s1.y = 5.7;
s1.z = 'A';
例2:
- 将结构体变量s1的存到s2中
s2.x = s1.x;
s2.y = s1.y;
s2.z = s1.z;
//或采用下方语句
//s2 = s1;
两个同类型的结构体变量之间可以直接赋值
声明结构体指针变量,指向结构体单元
struct 结构体名* 指针变量
例:
struct Stu* p;
- 使指针变量有指向
指针变量 = &结构体变量
例:
p = &s1;
- 通过指针引用结构体成员
指针变量->成员名
- 指针变量指向的某个结构体单元内的成员
例:
struct Stu s1;
struct Stu* p;
p = &s1;
p->x = 3;
//(*&s1).x = 3;
p->y = 5.7;
p->z = 'A';
结构体数组的定义
struct 结构体名 数组名[个数]
例:
struct Stu s[10];
例2:
#include <stdio.h>
#include <string.h>
struct Stu {
int sno;
char name[20];
double per;
};
void SumScore(struct Stu s[], double* pm)
{
for (int i = 0; i < 5; i++) {
*pm += s[i].per;
}
}
struct Stu* fmax (struct Stu s[])
{
struct Stu *p, *pMax;
int Max, x;
pm = s;
for (p = s + 1; p < s + 5; p++) {
x = p->per;
}
}
int main(void)
{
struct Stu a[5];
char n[20];
double sum;
struct Stu* pMax;
for (int i = 0; i < 5; i++) {
a[i]->sno = i + 1;
gets(n);
strcpy(a[i].name, n);
scanf("%lf", &a[i].per);
}
SumScore(a, &sum);
printf("%lf", sum / 5);
}