C语言中可以通过数组来表示每一个元素都是相同类型的数据,但当我们遇到元素之间是不同数据类型的整体刚怎么办呢?这个时候,我们就要用到结构体了。下面我们来看一个结构体的例子。代码如下:
#include <stdio.h>
struct Studer{
char *name;//C语言中没有字符串类型,定义字符串用字符指针或字符数组实现
int number;
char class[20];
};
int main(int argc, const char * argv[]) {
//定义一个结构体,结构体中还可以除递归定义自己以外的其他结构体
struct People {
char *sex;
int age;
float height;
struct Studer stu;
} peo = {"男",10,1.4f,{"小明",23,"三年级一班"}};
printf("修改前%s的年龄是%d岁\n",peo.stu.name,peo.age);
peo.age=11;
printf("修改后小明的年龄是%d岁\n",peo.age);
//定义一个结构体数组
struct People a[2] = {{"男",10,1.4f,{"小军",25,"三年级一班"}},{"女",10,1.4f,{"小红",24,"三年级一班"}}};
printf("修改前%s的学号是%d号\n",a[0].stu.name,a[0].stu.number);
a[0].stu.number=10;
printf("修改后%s的学号是%d号\n",a[0].stu.name,a[0].stu.number);
//定义一个结构体指针
struct People *p = &peo;
printf("修改前%s的身高是%.1f米\n",(*p).stu.name,(*p).height);
(*p).height=1.45f;
printf("修改后%s的身高是%.2f米\n",(*p).stu.name,(*p).height);
//定义一个指向数组的结构体指针
struct People *q = &a[0];
printf("修改前小军的名字是%s,他的身高是%.2f米\n",(*q).stu.name,(*q).height);
(*q).stu.name="晓军";
(*q).height=1.65f;
printf("修改后小军的名字是%s,他的身高是%.2f米\n",(*q).stu.name,(*q).height);
return 0;
}
输出结果如下:
修改前小明的年龄是10岁
修改后小明的年龄是11岁
修改前小军的学号是25号
修改后小军的学号是10号
修改前小明的身高是1.4米
修改后小明的身高是1.45米
修改前小军的名字是小军,他的身高是1.40米
修改后小军的名字是晓军,他的身高是1.65米
上面代码中有结构体的定义,也有包含结构体的结构体定义,还有结构体数组的定义和结构体指针的定义,甚至还有指向数组的结构体指针。一般对结构体变量的操作是以成员为单位进行的,一般形式:结构体变量名.成员名。结构体数组中也可以用数组下标访问每一个元素,就跟普通数组的用法一样,本例中的 a[0].stu.number就是其中的一种使用。结构体的指针也是跟我们普通指针的用法类似。
好了,今天就学习这么多,我们好好将这个例子理解并融汇贯通。