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库函数头文件目录寻找,称为标准方式
使用双引号,系统先在用户当前目录中寻找包含的文件,若找不到,再按标准方式查找。
结构体和共用体★
共用体所占内存长度等于最长的成员长度
结构体时所有成员变量总和
字节计算★★★
数据类型 | 字节 |
---|---|
char | 1 |
int | 4 |
short int | 2 |
float | 4 |
short | 2 |
double | 8 |
long | 4 |
long long | 8 |
文件★
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个字节