基础
数据类型——基本数据类型&构造数据类型
构造数据类型:e.g.数组——保存多个同种类型数据,结构——保存多个不同类型数据。
9.1-9.2定义
定义结构:
struct 结构名——————————struct student
{————————————————{
类型说明符 成员名1;———————int year;
类型说明符 成员名2;———————int num;
类型说明符 成员名3;———————float score;
}————————————————}
定义变量:
struct student Alice, Bob;定义了结构体变量Alice, Bob。
(or使用宏定义用一个符号常量代替结构类型,例如用STU代替所有的struct student,但需要先定义一个#define STU struct student)
调用:Alice.num = XXX ,Alice.name, Alice.score
初始化:struct student Alice{1992,3,17};
注意VS2017中结构初始化时只能用{},不可以用()
9.5结构数组
注意VS2017中未定义长度的char输入都要定义为const char,否则会报“const char 无法用于初始化char类型的数据”的错误。
9.6结构指针
定义:struct student *p;
变量:
p = &Alice;
调用:Alice.name——(*p).name——p->name等价
数组:
p = needs;——等价于——p = &needs[0];
示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#define N 3
struct subject
{
float Chinese;
float English;
float Math;
};
struct student
{
const char *name;
int num;
int age;
const char *sex;
struct subject score;
}Bob = { "Bob", 001, 20, "M" ,(90.5, 87.5, 96.0 )};
struct minneed
{
const char *name;
char sex;
unsigned short age;
float amount;
};
int main()
{
//结构数组实例
struct minneed needs[N] = { {"张三",1,55,150.0},{"李四",0,48,130.0},{"王五",0,56,180.0} };
//定义指针
struct minneed *pneed;
pneed = needs;
struct student *p;
p = &Bob;
int i, m = 0;
for (i = 0; i < N; i++)
{
printf("姓名:%s\n性别%s\n年龄%d\n地址%.2f\n", needs[i].name, ((*pneed).sex == 1) ? "男" : "女", pneed->age, needs[m].amount);
pneed++;
}
for (i = 1; i < N; i++)
if (needs[m].age < needs[i].age)
m = i;
printf("年龄最大的人的个人资料:\n");
printf("姓名:%s\n性别%s\n年龄%d\n地址%.2f\n", needs[m].name, (needs[m].sex==1)?"男":"女", needs[m].age, needs[m].amount);
//结构变量一般初始化
printf("%s %d %d %s %f %f %f",Bob.name,Bob.num,(*p).age,p->sex,Bob.score.Chinese,Bob.score.English,Bob.score.Math);
system("pause");
return 0;
}