C程序范例——结构体

Posted 药剂学徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C程序范例——结构体相关的知识,希望对你有一定的参考价值。

一、结构体类型定义。

  结构体类型和数组类型一样,需要由程序员定义,必须限定以后使用。

  

struct 类型标识符
{
          类型名 成员名;
          类型名 成员名;
          ...
};

  其中,struct 是结构体类型定义的关键字,他与其后用户指定的类型标识符共同组成结构体类型名。例如学生结构体类型定义如下:

struct st_type
{
  char num[7];
  char name[20];
  char sex;
  int age;
  float score;
  char address[30];
};

  说明:(1)定义结构体类型只是规定了这种数据类型的模型,在编译时并不赋给他存储空间,所以绝对不允许对定义的结构体类型进行存取数据的操作。

          (2)结构体成员可以是简单变量、数组或是另一个结构体变量。例如:

struct d_type
{
  int year;
  int minth;
  int day;
};
struct s_type
{
  char num[7];
  char name[21];
  char sex;
  struct d_type birthday;
  float score;
  char address[41]; 
};

          (3)结构体成员名可以与程序中其他变量名同名,系统会自动识别它,不会混淆。

          (4)结构体类型定义可以放在函数外部(全局有效),放在函数内部(只在本函数内部有用)

二、结构体变量。

1、结构体变量的定义。

  (1)一般形式定义。

struct 标识符
{
  结构体成员表;
};
struct 标识符 结构体变量;

  (2)在定义类型的同时,定义变量。

struct 标识符
{
  结构体成员表;
}结构体变量名表;

2、结构体变量的初始化。

注意:初始化个数不得超过成员数,若小于成员数,则剩余成员将被初始化为默认值。

3、结构体变量的引用。

对结构体变量整体的引用限制较大,只能对他进行一部分操作。

(1)可作为函数的形参,实参或是函数返回值等进行函数的数据传递。

(2)可以整体赋值,但是赋值号左边必须是结构体变量,右边必须的是同一种结构体类型的结构体变量或函数返回值,如:student1=student2;

(3)结构体变量成员的引用。

结构体变量名.成员名

三、结构体数组。(相同类型的结构体做元素就可以构成结构体数组,其中,每个元素内部含有不同类型的成员)

1、结构体数组定义类型。

struct st_type

{

  int year;

  int month;

  int day;

};struct st_type s[3];//定义了一个结构体数组s,他有三个元素,数组中的各元素在内存中是连续存放的。

2、结构体数组初始化。

结构体数组在定义中也可以同时初始化。

结构体类型名 结构体数组名【数组长度】

3、用结构体数组存储学生信息,每个学生有姓名,学号,成绩。

#define N4

#include “stdio.h”

struct {int num;char name[11]; int score;}t,s[N];

main(){int i,j,k;print("请输入第一个学生的学号:");

scanf("%d",&k);}

四、结构体和函数。

1、结构体作函数参数。

结构体成员,可以作为函数实参,形参为与该成员同类型的变量。

void printf(struct st_type s)

{printf("输出: 姓名 性别 年龄 成绩");printf("%s%s%c",s.name,...)}

2、返回值为结构体类型的函数。

结构体类型名 函数名 (形参表)

3、typedef语句。

typedef语句可以为系统已经定义的简单类型(如int double float 等)另起一个名称。也可以为自己定义的结构体枚举等类型另起一个名称。

typedef 类型名 新类型名

如:typedef int INTEGER;就是将int类型名修改为INTEGER

使用typedef语句的优点:(1)可以缩写长的类型定义,使用便于理解的数据类型名,使程序简洁,可读性强。

                                 (2)可将程序参数化,便于移植。

以上是关于C程序范例——结构体的主要内容,如果未能解决你的问题,请参考以下文章

在C代码中将结构体变量作为参数传递效率忒低

C++11多线程 原子操作概念及范例

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

如何优化C ++代码的以下片段 - 卷中的零交叉

C语言结构体,求大佬指点