考研复习之宏定义结构体的计算以及文件知识

10.27知识点

宏定义

带参数的宏和函数的区别:

(1)函数调用是计算参数表达式的值,然后带入形参。宏只是字符替换(就是把函数中的整体直接替换)

#include <iostream>

using namespace std;
#define m(x,y,z)x*y+z
int main()
{
   int a=1,b=2,c=3;
   cout<<m(a+b,b+c,c+a)<<endl;
    return 0;
}

输出结果为12

(2)函数调用,为形参分配临时的内存单元。宏定义是在编译前进行的,定义是不分配内存单元,不尽兴值的传递处理,也没有“返回值”的概念。
(3)函数实参形参定义类型一致,不一致,要类型转换(以形参为准★)而宏不存在类型问题
(4)函数得到一个返回值,宏可以设法得到多个结果。
(5)宏使用次数越多,源程序变长。函数调用不会使源程序变长。
(6)宏替换不占用运行时间,自占用编译时间。而函数调用则占用运行时间。

包含文件的处理

<stdio.h>和"stdin.h"的区别,尖括号,系统到存放c库函数头文件目录寻找,称为标准方式
使用双引号,系统先在用户当前目录中寻找包含的文件,若找不到,再按标准方式查找。

结构体和共用体★

共用体所占内存长度等于最长的成员长度
结构体时所有成员变量总和

字节计算★★★
数据类型字节
char1
int4
short int2
float4
short2
double8
long4
long long8
文件★

在这里插入图片描述

FILE 文件类型指针
fopen 文件打开函数
FILE *fp; fp=fopen(“文件名”,“打开方式”);

exit 和fclose 的区别
exit函数关闭所有文件,终止正在执行的程序。在向文件写数据时,是先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。如果当数据没有充满缓冲区而程序结束运行,将会将缓冲区中的数据丢失。
fclose函数关闭文件,会先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。

fclose函数也会带回一个返回值,当顺利地执行了关闭操作,则返回值为0;否则返回EOF(-1).

文件的状态函数

feof函数用来判断是否到文件末尾,若到达文件末尾返回非0;反之未到达文件末尾返回0(★)。
ferror函数用来检查错误,一般形式为ferror(fp);若ferror返回值为0(假),表示未出错;若返回一个非零值,表示出错。

文件的读写函数

fputc输入函数

fputc()
    int fputc(int char, FILE *stream);
    //把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream中,
    //并把位置标识符往前移动
    //char -- 这是要被写入的字符。该字符以其对应的 int 值进行传递。
    //stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。

fread输入函数

fread()
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    // ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
    // size -- 这是要读取的每个元素的大小,以字节为单位。
    // nmemb -- 这是元素的个数,每个元素的大小为 size 字节。
    // stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

fgetc输出函数

fgetc()
    int fgetc(FILE* fp);
    //从fp所指的文件中获取下一个字符,出错返回EOF,
    //否则返回所读的字符

fwrite输出函数

fwrite()
    size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
    // 向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。
    // 该函数以二进制形式对文件进行操作,不局限于文本文件
    //返回值:返回实际写入的数据块数目
    // buffer:是一个指针,对fwrite来说,是要获取数据的地址;
    // size:要写入内容的单字节数;
    // count:要进行写入size字节的数据项的个数;
    // stream:目标文件指针;
    // 返回实际写入的数据项个数count。

fgets函数

fgets()
    char *fgets(char *buf, int bufsize, FILE *stream);
    // *buf: 字符型指针,指向用来存储所得数据的地址。
    // bufsize: 整型数据,指明存储数据的大小。
    // *stream: 文件结构体指针,将要读取的文件流。

fputs函数

fputs()
    int fputs(char *s, FILE *stream);
    //         s---写入的字符串     strteam---文件指针
    // 如果写入成功,则返回非0,此时编译器默认为返回1
    // 如果写入错误,则返回EOF

frewind函数作用: 使位置指针重新返回文件的开头。
fseek(文件类型指针,位移量,起始点);
0表示“文件开始”
1表示“当前位置”
2表示“文件末尾”
位移量是指以“起始点”为基点,向前移动字节数 目的是为了文件长度大于64KB时不至出问题,位移量常使用long型数据。

fseek(fp,100L,0)
  //将位置指针移动到离文件头100个字节处
  fseek(fp,50L,1)
  //将位置指针移动到离当前位置50个字节处
  fseek(fp,-10,2)
  //将位置指针从文件末尾处向后退10个字节
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值