赞
踩
在C语言中,可以定义结构体类型,将多个相关的类型的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。
1、标准定义方式
#include <stdio.h> //结构体类型的声明与定义分开 struct student { int age; //年龄 float score; //分数 char sex; //性别 }; //结构体类型声明结束 int main () { //结构体类型变量的定义 struct student a={23, 98, 'f'}; printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex ); return 0; }
2、声明结构体时定义变量(不环保)
#include <stdio.h>
//在结构体的声明时直接定义变量
struct student
{
int age; //年龄
float score; //分数
char sex; //性别
} a={23, 87,'n'}; //声明结构体时直接定义变量a,并赋初值
int main()
{
//在main函数中直接调用定义好的结构体变量a
printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
}
3、无类型名的结构体(此法最差,只能用一次)
#include <stdio.h>
//直接定义结构体变量,没有结构体类型名
struct
{
int age;
float score;
char sex;
} t={23, 98, 'f'};
int main ()
{
printf("年龄:%d 分数:%f 性别:%c\n", t.age, t.score, t.sex);
return 0;
}
4、用typedef给自定义的结构体加一个名字(typedef 已有类型 新类型名)
#include <stdio.h> //在结构体的声明时直接定义变量 typedef struct student { int age; //年龄 float score; //分数 char sex; //性别 }; //声明结构体时直接定义变量a,并赋初值 int main() { //定义结构体变量 student a={23, 87,'n'}; //此时就可以直接用student这个类型名了 //在main函数中直接调用定义好的结构体变量a printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex ); }
用结构成员运算符点“ . ”就可以了:结构体变量名.成员名;
注意,点其结合性是自左至右的,它在所有的运算符中优先级是最高的。
1、一维数组
比如声明了一个结构体student,定义了一个变量stu:
struct student
{
char name[10]; //相当于一个字符串,即char型数组
int num; //int型数据,编号
int age; //年龄
float score[3]; //3门课的分数
char sex; //性别
} stu;
在这个结构体中,如果要访问第二门课的分数,则需要这样访问:
//输入:
scanf("%f", &stu.score[1]); //取的是第二门课成绩的地址
//输出:
printf("%f", stu.score[1]) //输出的是第二门课成绩
2、二维数组(同理)
比如声明了一个结构体student,定义了一个变量stu:
struct student
{
char name[10]; //相当于一个字符串,即char型数组
int num; //int型数据,编号
int age; //年龄
float score[3][2]; //3门课的分数,都有两次测验
char sex; //性别
} stu;
//输入:
scanf("%f", &stu.score[1][1]); //取的是第二门课第二次测验成绩的地址
//输出:
printf("%f", stu.score[1][1]) //输出的是第二门课第二次测验的成绩
3、其他更高维数组的用法都是一样的道理,以此类推。
比如声明了一个结构体student,定义了一个结构体变量数组stu[3]:
struct student
{
char name[10]; //相当于一个字符串,即char型数组
int num; //int型数据,编号
int age; //年龄
float score[3][2]; //3门课的分数,都有两次测验
char sex; //性别
} stu[3];
这里的stu就是一个结构体数组,包含了3个student类型的结构体变量。
接下来我们试着访问第3个结构体变量的第1门课第2次测验的成绩:
//输入:
scanf("%f", &stu[2].score[0][1]); //取的是第三个结构体变量第一门课第二次测验成绩的地址
//输出:
printf("%f", stu[2].score[0][1]) //输出的是第三个结构体变量第一门课第二次测验的成绩
比如声明了一个结构体student,里面包含了一个结构体GoodStudent,里面声明了好学生的名字和成绩,同时定义了一个结构体变量数组stu[3]:
struct student
{
int num; //int型数据,编号
int age; //年龄
char sex; //性别
struct GoodStudent
{
char name[10]; //相当于一个字符串,即char型数组
float score[3][2]; //3门课的分数,都有两次测验
}
} stu[3];
此时要访问结构体GoodStudent好学生中的成绩,仍然是用“ . ”成员访问符来访问。
比如要访问第2个结构体变量的好学生的第2门课第1次测验的成绩:
//输入:
scanf("%f", &stu[1].GoodStudent.score[1][0]); //取的是第2个结构体变量的好学生的第2门课第1次测验的成绩的地址
//输出:
printf("%f", stu[1].GoodStudent.score[1][0]) //输出的是第2个结构体变量的好学生的第2门课第1次测验的成绩成绩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。