更新中...
结构的作用
※处理大量的数据,除了使用数组外,还有一个方法,就是使用结构。
※以前我们只学过int,double,char等几种类型,学了结构以后,程序员就可以定义自己的类型。
※从二维表格理解结构(见Excel演示)
结构类型的定义
定义格式:
struct 结构名
{
成员表列
}变量名表列;
结构名”和“变量名表列”可省略,初学者在使用结构时,一般可省略后面的变量名表列,以便于理解。
如:
struct student
{
char name[20]; /*姓名*/
char sex[3]; /*性别*/
int age; /*年龄*/
};
※上面定义了一个结构student,中间是此结构的3个成员变量。记住,它们不可以赋初值,目前只是个躯壳。
※那么什么时候才能给里面的成员赋值呢?那就是定义此结构类型的变量。
※结构在定义时,后面的分号不可少。
结构变量
定义格式:
struct 结构名 变量名;
如:
struct student stu;
此处的stu就是一个student类型的变量。和数组一样,它也可以在定义的时候初始化,但是格式有些不同:
struct student stu={“张三”,”男”,23};
注意:结构变量初始化,必须根据成员变量的类型逐个赋初值,而数组中所有的元素都是赋同样类型的值。
使用结构变量
结构变量不能直接引用,必须使用·号对结构中的成员变量进行操作,如:
stu.age=18; /*赋值*/
printf(“%d”,stu.age); /*打印*/
※成员变量像普通变量一样可进行数学运算。
程序1
学生结构
// 11_1学生结构体 #include <stdio.h> #include <string.h> struct student //定义变量 { char name[20]; char sex[3]; int age; }; int main() { struct student stu; struct student stu1 = {"李四","女",19}; //变量赋值 struct student stu2 = {"王二麻子","男",25}; stu.age = 23; strcpy(stu.name, "张三"); //字符串赋值 strcpy(stu.sex, "男"); puts(stu.name); //字符串输出函数 printf("%d\n", stu.age); }
联合
在“我的电脑->文件夹选项”中有两种按钮,圆形的是单选按钮,方形的是多选按钮。结构就类似于多选按钮,你可以同时使用其中多个成员变量。联合就相当于单选按钮,无论何时,你只能使用其中一个成员变量,并且只有最后一次 设置的成员变量有效。
结构 与 联合的区别:
结构相当于多选框,可以选择多种变量。
联合相当于单选框,只能选择一个变量,并且变量是以最后的使用为依据的。
联合的定义格式与结构差不多,只是前面的struct改成union。除此之外,联合还有以下特点:
※只能对联合的第一个成员进行初始化。
如:
union un
{
int i;
double d;
}un1={10}; //只能初始化一个变量,联合是单选。
※联合变量的地址和它的各成员都是同一地址,因为它是“联合”。
※联合与结构之间可以嵌套定义
程序2
网友在互通QQ的时候,通常不是给号码就是给昵称,如何用联合来表达?
// 11-2-QQ联合 网友在互通QQ的时候,通常不是给号码就是给昵称,如何用联合来表达? #include <stdio.h> #include <string.h> union QQ { char name[20]; long number; }; int main() { union QQ qq; //定义QQ变量 strcpy(qq.name, "优雅の疯子"); printf("%s\n", qq.name); qq.number = 787228754; printf("%ld\n", qq.number); printf("%s\n", qq.name); }
// 11-3结构体 有3个学生结构变量,从中找出年龄最大的那个学生,并打印出这个学生的姓名、性别、年龄。 #include <stdio.h> #include<string.h> struct student { char name[20]; char sex[3]; int age; }; int main() { struct student stumax; //年龄最大的学生 struct student stu1 = {"小明","男",28}; struct student stu2 = {"7Don","男",25}; struct student stu3 = {"小红","女",18}; stumax = stu1; //年龄最大的学生始终都在stumax中 if (stumax.age < stu2.age) //这里要注意比较的时候是比结构中的年龄 stumax = stu2; //赋值的时候是直接赋值结构 if (stumax.age < stu3.age) stumax = stu3; printf("%s,%s,%d\n", stumax.name, stumax.sex, stumax.age); /*只能将元素一个一个地输出*/ }