Some Notes

Be hard-working every day.

一些有用的东西又没有用的东西

过时观点警告

这些东西以前对我大概没用,但是现在我认为还是很有必要学习的。
所以说我为什么要更新这个。

宏定义和类型定义

宏定义将一个指令导向另一个指令宏定义属于预处理指令,使用规范为:

#define [标识符] [常量]

与变量不同的是:宏定义可以理解为把一个文本替换成另一个文本。比如说:

#include <cstdio>
#define a 3 + 2
using namespace std;

int main()
{
    printf("%d", a * 3);
    
    return 0;
}

#include <cstdio>
using namespace std;

int main()
{
    int a = 3 + 2;
    printf("%d", a * 3);
    
    return 0;
}

使用了 #define 的输出 ,使用了 int 的输出 。这是因为 #define 只是把 替换为了 ,因此先算 ,再算 ,而 int 定为 ,再算 。从这些角度来看,define 只是一个“替换”的操作。


类型定义将变量类型导向简单的标识符。类型定义属于语句,使用规范为:

typedef [变量类型] [标识符];

#define 不同的是:#define 属于预处理指令,需要在预处理器处理。而且 #define 可以将任何指令或字符指向标识符;而 typedef 属于语句,需要在编译器中编译。且 typedef 只支持将变量类型指向标识符。例如:

#include <cstdio>
#define pnt printf // printf可以写成pnt
#define scn scanf // scanf可以写成scn
using namespace std;

int main()
{
    typedef long long ll; // long long可以写成ll
    // typedef scanf scn ; -> 这句话是错误的
    ll a; // 定义了变量a,类型为long long
    scn("%lld", &a) ;
    pnt("%lld", a + 1) ;
    
    return 0 ;
}

常量

无论是 int 还是 double 类型,他们都是变量,即随时可以改变。当想用到不用改变的量时,就要用到常量了。

定义一个常量很简单,只需要在变量类型前加上一个 const 就行了。例如:

#include <cstdio>
using namespace std;

const int a = 100;
int b[a] = {0, 1, 2};
int main()
{
    for(int i = 0; i < 100; i++)
    {
        printf("%d\n", b[i]);
    }
    
    return 0 ;
}

在这里,我们建立了一个名为 的常量,其值为 。随后定义一个名为 的数组,大小为 数组的大小就是

一般来说对于我来说,常量的作用不算特别大,但是拿来定义数组却很方便。

有符号和无符号

有符号signed,符号即为 ,在一般的数据定义中,都是有符号的类型。无符号unsigned,即没有复数,正数数据范围会大很多。比如普通的 intsigned int)数据范围是 而无符号 intunsigned int)数据范围是 ,这是因为 unsigned int 将负数部分拿来存正数部分,所以可以存的正数会大很多。

在变量类型中,只有 signed 会被认作 signed int;只有 unsigned 也会被认作 unsigned int;不带 signedunsigned 的任何数据类型都会被认做有符号 signed 数据类型。因此,在某些时候主函数 int main() 也可以写成 signed main()

读写数据

当数据很大时,直接从控制台输入是不可能的。同样地,控制台输出数据过多也不方便比较数据。

#include <stdio.h>
using namespace std;

int main()
{
    FILE *fpi = freopen("test.in", "r", stdin);
    FILE *fpo = freopen("test.out", "w", stdout);

    fclose(fpi);
    fclose(fpo);
    return 0;
}

这是 Windows 下的命令,所以提示符用 >

> fc test.out test.ans
> code -d test.out test.ans