C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

Dear 丶 2023-10-02 10:47 69阅读 0赞

上一篇文章:返回指针值的函数+指向函数的指针+main()函数的参数

C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

  • 结构体
    • 引例
    • 结构体变量的定义
    • 结构体变量的使用
      • 结构体变量作为函数参数
      • 结构体变量的初始化
  • 下一篇文章

结构体

引例

输出平均分最高的学生信息

  1. #include <stdio.h>
  2. struct student
  3. {
  4. int num;
  5. char name[10];
  6. int computer,english,math;
  7. double average;//这些都是结构体成员
  8. };//注意这个分号不要可少,否则会报错
  9. int main()
  10. {
  11. int i,n;
  12. struct student s1,max;//定义结构体变量s1和结构体变量max
  13. printf("Input n:");
  14. scanf("%d",&n);//n是学生的个数
  15. printf("Input the student's number, name and course scores:\n");
  16. for(i=1;i<=n;i++)//用for循环实现n个学生成绩的输入
  17. {
  18. printf("No.%d:",i);//提示学生的序号
  19. scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);
  20. //分别给结构体里面的变量输入数值
  21. s1.average=(s1.math+s1.english+s1.computer)/3.0;//计算出该学生的平均成绩
  22. if(i==1)max=s1;
  23. if(max.average<s1.average)//找出平均分最高的学生
  24. max=s1;//将s1里面的成员变量的值分别对应地赋值给max
  25. }
  26. printf("num:%d, name:%s, average:%.2lf\n",max.num,max.name,max.average);
  27. //将平均成绩最高的学生成绩输出
  28. return 0;
  29. }
  30. 1
  31. 2
  32. 3
  33. 4
  34. 5
  35. 6
  36. 7
  37. 8
  38. 9
  39. 10
  40. 11
  41. 12
  42. 13
  43. 14
  44. 15
  45. 16
  46. 17
  47. 18
  48. 19
  49. 20
  50. 21
  51. 22
  52. 23
  53. 24
  54. 25
  55. 26
  56. 27
  57. 28
  58. 29
  • 结构体类型的定义:
    结构体类型实际上是一种模板,它的定义形式为:

    struct 结构体名
    {

    1. 类型标识符 结构体成员名1;
    2. 类型标识符 结构体成员名2;
    3. ...
    4. 类型标识符 结构体成员名3;

    };//最后的这个分号不要忘了

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7

注意不要忘记最后的分号

结构体变量的定义

在结构体类型定义好的情况下,注意是结构体类型定义好的情况下,才能定义结构体变量。
比如:

  1. struct student
  2. {
  3. int num;
  4. char name[10];
  5. int computer,english,math;
  6. double average;
  7. };
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7

这个是结构体类型的定义,然后才能进行结构体变量的定义:

  1. struct 结构体类型名 结构体变量名;
  2. 1
  3. struct student stu1,stu2;//定义两个结构体变量
  4. 1

也可以在定义结构体类型的时候同时定义结构体变量,如:

  1. struct student
  2. {
  3. int num;
  4. char name[10];
  5. int computer,english,math;
  6. double average;
  7. }stu1,stu2;//定义两个结构体变量;
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7

也可以省略结构体类型名,如:

  1. struct//省去了结构体类型的名字student
  2. {
  3. int num;
  4. char name[10];
  5. int computer,english,math;
  6. double average;
  7. }stu1,stu2;//定义两个结构体变量;
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7

省略了结构体类型的名字,在这种情况下,结构体变量只能在后面同时定义,而不能在主函数中定义。所以并不建议这样定义结构体变量

  • 注意:结构体变量的变量名和成员名可以相同,二者互不影响,互不干扰,如:

    struct date
    {

    1. int year;
    2. int month;
    3. int day;

    };
    int main()
    {

    1. struct date year;
    2. year.year = 1980;

    }

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11

结构体变量的使用

使用形式为:结构体变量.结构体成员名

  1. scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);
  2. 1
  • 注意:如果结构体类型中有字符数组成员,并且在主函数中要给字符数组赋字符串常量时,不能直接用“=”,即s1.name="张三";是错误的,必须使用字符串复制函数strcpy()函数来实现,如:strcpy(s1.name,"张三");
    在这里插入图片描述
    在这里插入图片描述
  • 同一类型的结构体变量间可以赋值
    如:stu2=stu1;将结构体变量stu1里面的所有成员变量的值分别对应赋给结构体变量stu2

结构体变量作为函数参数

  • 结构体变量的成员作为函数的实参,形参为普通变量或数组
  • 也可以将结构体变量作为函数的参数
    例如:(请看代码中的详细注释,并观察运行结果)

    include

    include

    struct s_score
    {

    1. int no;
    2. char name[10];
    3. int score[3];

    };//不要忘记这个分号
    void output(struct s_score a);//形参为结构体变量
    void fun(int *q);//形参为指针
    main()
    {

    1. struct s_score a={
    2. 1001,"zhangsan",{
    3. 60,60,60}};//这行语句是对结构体变量的初始化
    4. output(a);
    5. a.no=1001;
    6. strcpy(a.name,"wang lin");
    7. a.score[0]=78;
    8. a.score[1]=88;
    9. a.score[2]=94;
    10. output(a);
    11. fun(a.score);//结构体中的数组成员,数组名为数组首地址
    12. output(a);

    }
    void output(struct s_score a)//将结构体变量作为形参接收来自主函的结构体变量
    {

    1. int i;
    2. printf("%d %s ",a.no,a.name);
    3. for(i=0;i<3;i++)
    4. printf("%4d",a.score[i]);
    5. printf("\n");

    }
    void fun(int *p)//定义指针变量来接收主函数传入的数组首地址
    {

    1. int i;
    2. for(i=0;i<3;i++)
    3. {
    4. *(p+i)+=10;//通过循环变量i来对指针变量进行运算
    5. if(*(p+i)>100)
    6. *(p+i)=100;
    7. }

    }

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41

20201209235716106.png

结构体变量的初始化

结构体变量的初始化一般形式为:
结构体变量名={初值表};
就像上面的语句:

  1. struct s_score a={
  2. 1001,"zhangsan",{
  3. 60,60,60}};
  4. 1

结构体初值的数据类型,应与结构体变量中相应成员所要求的一致,否则会出错



发表评论

表情:
评论列表 (有 0 条评论,69人围观)

还没有评论,来说两句吧...

相关阅读