文件包含与结构体

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);

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

原文地址:https://www.cnblogs.com/lvfengkun/p/10380521.html

时间: 2024-10-09 01:10:00

文件包含与结构体的相关文章

c语言_文件操作_FILE结构体小解释

参考文档来自:https://www.cnblogs.com/haore147/p/3648395.html 我们通过fopen返回一个文件指针(指向FILE结构体的指针)来进行文件操作. 在vs2013下的代码如下: #include <stdio.h> #pragma warning(disable:4996) int main() { FILE *p = fopen("C:\\test\\win\\a.txt", "r"); char buf[10

62_json文件解析成结构体格式

package main import ( "encoding/json" "fmt") type People struct { //由于结构体生成json文本成员变量必须大写,可以使用struct_tag来二次编码,此时可以使用小写 Name string `json:"name"` Subject []string Isok bool `json:", string"` //转换成字符串类型输出 Price float6

在C的头文件中定义的结构体,如何在cpp文件中引用

解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dialog3.h" #include <QDebug> extern "C" { typedef struct PRINT { unsigned char Parameters;//BitDepthAC,BitDepthDC,q unsigned char PlaneCo

用结构体读取文件

#include<stdio.h>#include<stdlib.h>#include<string.h> int main(void){ struct data { char id[20]; char name[20]; char sex[10]; int old; char number[20]; char habit[10]; char b[10]; int piao; } student[10]; FILE *fp; if((fp=fopen("shi

格式化说明符定义、转义字符、枚举、结构体、typedef

1.格式化说明符定义: %i,%d:输出十进制整型数 %6d:输出十进制整型数,至少6个字符宽 %li,%ld:输出长整数 %u:输出无符号整数 %lu:输出无符号长整数(相当于:unsigned long int) %f,%g:输出浮点类型数 %.2f:输出浮点类型数,小数点后有两位小数 %lf:输出双精度浮点数 %o:输出八进制数 %e:以科学计数法,输出浮点数 %c:输出字符 %s:输出字符串 %p,%x:输出变量的内存地址和十六进制数 2.转义字符: \a             响铃符

Linux下DIR,dirent,stat等结构体详解

摘要: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自<UNIX环境高级编程(第二版)>).函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用: 最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎

FILE 结构体的定义,inode ,软链接和硬链接的理解

一.FILE结构体: C将每个文件简单地作为顺序字节流.每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件的关系. 在开始执行程序的时候,将自动打开3个文件和相关的流:标准输入流.标准输出流和标准错误.流提供了文件和程序的通信通道.例如,标准输入流使得程序可以从键盘读取数据,而标准输出流使得程序可以在屏幕上输出数据.打开一个文件将返回指向FILE结构(在stdio.h中定义)的指针,它包含用于处理文件的信息,也就

关于C/C++结构体参数类型定义冲突

1.对于纯C程序调用纯C编译的动态库: 可直接在纯C程序包含的头文件中修改结构体参数类型名称.编译器不会有任何警告或者错误,并且可正常调用. 2.对于C++程序调用C++编译的动态库: 必须C++程序和C++动态库都使用extern "C"包含,方可以任意修改结构体参数类型名称.编译器不会有任何警告或者错误,并且可正常调用. 总结:只有当使用C语言方式编译相互调用时,可以任意修改结构体参数类型名称.

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

一.结构体中可以定义一般的宏定义 如: struct aaa{   #define STATUS_1 100   #define STATUS_2 200   #define STATUS_3 300   ........}: 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的.   一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告.可是如果不在结构体之内,名字重复可肯定是error.(未证实,可以做实验,而且可以把两处的