文件包含与结构体

1、文件包含

(1)1个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。

(2)文件包含允许嵌套,即在一个被包含的文件种包含另一个文件。

(3)包含命令中的文件名可以用双括号括起来,也可以用尖括号括起来。但这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找;使用双引号表示首先在当前的源文件目录中去查找,若未找到则到包含目录中去查找。

条件编译

预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件,这对程序的移植和调试是很有用的。

规则:#ifdef 标识符

    程序段1

      #else

    程序段2

   #endif

功能:若标识符已被#define命令过这对程序段1进行编译,否则对程序段2进行编译。若没有程序段2,则#else可不写。

2、结构体

有时需要将不同类型的数组和成一个有机的整体,以便于引用。

定义一个结构体的一般形式为:

struct 结构名

{

  成员表列

};

成员表列由若干个成员组成,每个成员都是该结构的组成部分,对每个成员也必须做类型说明,其形式为:类型说明符  成员名

例:

struct student
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
}

可采取以下三种方法定义结构体类型变量:

(1)先声明结构体类型再定义变量名

例:strct student  student1,student2;

定义了student1和student2为strct student类型变量,即它们具有strct student类型的结构。

在定义结构体变量后,系统会为之分配内存单元。

(2)在声明类型的同时定义变量

这种形式的定义一般形式为:

struct 结构体名

{

  成员表列

}变量名表列;

例:

struct student
{
    int num;
    char name[20];
    char sex;
    int age;
    float score;
    char addr[30];
}student1,student2;

(3)直接定义结构体类型变量

一般形式为:

struct 

{

  成员表列

}变量名表列;

即不出现结构体名。

3、结构体嵌套:

例:

 1 #include "StdAfx.h"
 2 #include<stdio.h>
 3 #include<string.h>
 4 
 5 void main()
 6 {
 7     struct date
 8     {
 9         int month;
10         int day;
11         int year;
12     };
13     struct 
14     {
15         int num;
16         char name[20];
17         char sex;
18         struct date birthday;
19         float score;
20     }boy1,boy2;
21 }

结构体变量的引用

规则:(1)不能将一个结构体变量作为一个整体进行输入和输出。

引用方式:结构体变量名.成员名

”.“是成员运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看待。

例:student1.num=100是将100赋值给student1变量中的成员num。

例:

#include "StdAfx.h"
#include<stdio.h>


void main()
{
    struct date
    {
        int month;
        int day;
        int year;
    };
    struct 
    {
        int num;
        char *name;
        char sex;
        struct date birthday;
        float score;
    }boy1,boy2;
    boy1.num=007;
    boy1.name="jame";
    scanf("%c%f",&boy1.sex,&boy1.score);
    boy2=boy1;
    printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
    printf("sex=%c\nscore=%f\n",boy2.sex,boy2.score);
}

(2)若成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级成员。只能对最低级的成员进行赋值或存取运算。

例:

#include "StdAfx.h"
#include<stdio.h>


void main()
{
    struct date
    {
        int month;
        int day;
        int year;
    };
    struct 
    {
        int num;
        char *name;
        char sex;
        struct date birthday;
        float score;
    }boy1,boy2;
    boy1.num=007;
    boy1.name="jame";
    scanf("%c%f",&boy1.sex,&boy1.score);
    scanf("%d",&boy1.birthday.year);
    scanf("%d",&boy1.birthday.month);
    scanf("%d",&boy1.birthday.day);
    boy2=boy1;
    printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
    printf("sex=%c\nscore=%f\n",boy2.sex,boy2.score);
    printf("birthday:%d/%d/%d",boy1.birthday.year,boy1.birthday.month,boy1.birthday.day);
}

(3)对结构体的变量成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)

例:student2.score=student1.score;

sum=student2.score+student1.score;

(4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

例:

#include "StdAfx.h"
#include<stdio.h>


void main()
{
    struct date
    {
        int month;
        int day;
        int year;
    };
    struct 
    {
        int num;
        char *name;
        char sex;
        struct date birthday;
        float score;
    }boy1;
    boy1.num=007;
    boy1.name="jame";
    printf("The address of struct is %o:\n",&boy1);
    printf("The address of num is %o:\n",&boy1.num);
}

注:不能整体读入结构体变量。

例:scanf("%d,%s,%c,%d,%f,%s",&student1);

结构体变量的地址主要用作函数参数,传递结构体变量的地址。

posted @ 2019-02-14 23:02  巫师笔记  阅读(351)  评论(0编辑  收藏  举报