Some of the notes is in Chinese with poor language organization, however, I firmly suppose those accumulation has tremendous value which cannot be disgarded.
仅仅在函数第一次被调用的时候初始化。之后就不会再初始化。
是地址,让形式指针和实际指针指向同一个数字,然后改变这个指针的指向,就是改变这个绝对物理地址指向的数字,所以即便形式参数消失,地址指向的数字改变,最后输出实际参数的地址不变,但是实际参数的值却改变了。(我真tm聪明)
首先定义一个二维数组 a[I][I]; 各个概念 a+i &(a+i) 指向第i行的指针 a[i] (a+i) &((a+i)+0)指向第i行第零列的指针 a[I][k] ((a+i)+k)第i行第k列的元素
计算a[I][j]相对于首元素偏移的地址数目 = i*列数➕j Int (*p)[4]是定义一个指针,指向一个含有4个元素的整形数组,把数组当成一个指向的整体来看,如果指针➕1,那么指向下四个元素组成的数组。 Whereas int *p [4] is not , it is a array which has 4 elements , 每个元素都是一个指针类型
[] * 这两个符号使得指针的指向向下一个维度, &使指针的指向向上一个维度 当维度降低了n次,(n是数组的维度)那么指针的指向就是具体元素的值了
void function(int * x) void function(int x[] )
#include cout<<precision(小数点后精确的位数)<<num;
初始化为 Int (p) (int ,int ) p=function(给指针赋予函数的开头地址) 调用的时候使用p(容易忘记)
如果拥有一个void *int p指针 想给一个int a赋值 a= *(int *) p
左移动 15<<1即把15换成二进制,所有的数字向左移动一个单位
右移动 15>>1 分成 逻辑右移 (最高位默认补0)
- 算数右移 等价于/2 (无论正负) 定义在不同的编译器中 也不同,故程序鲁棒性会降低
位域是用来减少空间占用的
10进制先化16进,然后两两位数从小到大以二进制存放
r 只读,不可以写入,不存在时候指针返回NULL
r+ 又读又写,其余同上
w只写 不读, 不存在时候创造文件,(文件原有存在文本被覆盖)
w+又读又写 其余同上 a(appendix)只w不r 不存在返回null,(写入内容存在文件末尾,不覆盖)
a+ 可r可w,不存在创造文件,可在任意位置写入内容,初指针在文件末尾
ab(在末尾加一个b就是binary 二进制方式) 注意调用函数之后指针是否为空,如果为空记得return -1报错
fclose和 fopen搭配,关闭文件 freopen则不需要
读取文件EOF(end of file)就相当于读取文件时候的最后末尾的文件,如果读到这个关键字就结束读取