当前位置:   article > 正文

结构体定义和使用_结构体的定义和使用

结构体的定义和使用

收获一:结构体的定义和使用

struct stu{
char *name; //姓名
int num; //学号
    char sex; //性别
float score; //成绩
};
struct stu stu1, stu2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。结构体的各个成员在内存中是连续存储的。stu1、stu2 的内存如下图所示:

你也可以在定义结构体的同时定义结构体变量:

struct stu{
char *name; //姓名
 		int num; //学号
char sex; //性别
float score; //成绩
 } stu1, stu2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

将变量放在结构体定义的最后即可。

收获二:结构体变量
结构体也是一种数据类型,可以用来说明变量。例如:
struct stu stu1, stu2;
定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 4 个成员组成。注意关键字 struct 不能少。
如果只需要 stu1、stu2 两个变量,也可以不写结构体名字:

struct{ //没有写 stu
 		 char *name; //姓名
		 int num; //学号
		 char sex; //性别
		 float score; //成绩
 } stu1, stu2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这样做书写简单,但是因为没有结构体名,后面就没法用该结构体定义新的变量。

收获三:宏定义结构体变量
也可以用宏定义使一个符号常量来表示一个结构类型,例如:

#define STU struct stu
STU{
char *name; //姓名
int num; //学号
 		char sex; //性别
 		float score; //成绩
};
STU stu1, stu2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

收获四:成员的获取和赋值
在 C 语言中,使用点号.来获取结构体中的一个成员,一般格式为:
结构变量名.成员名
例如:

  1. stu1.name; //第一个学生的姓名

  2. stu2.score; //第二个学生的成绩
    获取成员后,就可以对该成员进行赋值了,例如:

  3. stu1.name = “Tom”;

  4. stu2.score = 90.5;
    除了可以对成员进行逐一赋值,也可以像数组一样整体赋值,例如:

     struct stu{
     		    char *name; //姓名
     	    	int num; //学号
      			char sex; //性别
      			float score; //成绩
     } stu1, stu2 = { "Tom", 10, 'M', 90 };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

不过整体赋值仅限于上面这样的情况,也就是定义结构体的同时声明变量。下面的写法是错误的:
stu2 = { “Tom”, 10, ‘M’, 90 };
一个完整的示例:

#include <stdio.h>
 #define STU struct stu
 int main(){
	STU{
		 		char *name; //姓名
		 		int num; //学号
				char sex; //性别
				 float score; //成绩
		 };
 		STU stu1;
 		stu1.name = "James Bond";
 		stu1.num = 1;
 		stu1.sex = 'M'; //用 M 表示男性,W 表示女性
 		stu1.score = 99;
		printf("Hello everyone! My name is %s, a naughty boy, but with good 
scores(%.2f) and top No.(%d)!", stu1.name, stu1.score, stu1.num);	
 		return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

运行结果:
Hello everyone! My name is James Bond, a naughty boy, but with good
scores(99.00) and top No.(1)!

收获五:结构体数组
结构体数组的每一个元素都是结构体。在实际应用中,经常用结构体数组来表示一个拥有相同数据结构的群体,比如一个班的学生,一个车间的职工等。

定义结构体数组和定义结构体变量的方式类似,例如:

 struct stu{
         char *name;
		 int num;
		 char sex;
		 float score;
}class[5];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

表示该班级有 5 个学生。
结构体数组可以初始化赋值,例如:

 struct stu{
     		char *name;
      		int num;
			char sex;
			float score;
 }class[5] = {
			 {"Li ping", 5, 'M', 45},
 			{"Zhang ping", 4, 'M', 62.5},
			{"He fang", 1, 'F', 92.5},
 			{"Cheng ling", 2, 'F', 87},
 			{"Wang ming", 3, 'M', 58}
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

当对数组中全部元素赋值时,也可不给出数组长度。
结构体数组的使用也很简单,例如,获取“Wang ming”的成绩:
class[4].score;
【示例】计算学生的平均成绩和不及格的人数。

 #include <stdio.h>
 struct stu{
 		char *name;
		int num;
 		char sex;
 		float score;
 }class[5] = {
		{"Li ping", 5, 'M', 45},
 		{"Zhang ping", 4, 'M', 62.5},
		{"He fang", 1, 'F', 92.5},
 		{"Cheng ling", 2, 'F', 87},
		{"Wang ming", 3, 'M', 58}
};

int main(){
 		int i, fail_num=0;
 		float average, sum=0;
 for(i=0; i<5; i++){
 		sum += class[i].score;
		if(class[i].score < 60) fail_num++;
}
 		printf("sum=%.2f\naverage=%.2f\nfail_num=%d\n", sum, sum/5,
fail_num);
 return 0;
}

运行结果:
sum=345.00
average=69.00
fail_num=2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/142799
推荐阅读
相关标签
  

闽ICP备14008679号