本文发布于 1217 天前,最后更新于 952 天前,其中的信息可能已经有所发展或是发生改变。
电子书
C++ Primer Plus (第 6 版)中文版
内联函数详细解释
默认参数+重载函数,非默认参数的函数优先?
函数声明
数组
数组的奇奇怪怪的知识点,
int a[ ] = {1,2,3,4} 可以运行,数组范围为赋值范围
int a[ ][4] = {1,2,3,4} 可以运行,int a[4][ ] = {1,2,3,4} 不可以运行
int a[2][2] = {1,2,3,4} 可以运行,前二个自动赋值给 a[1][1] 和 a[1][2],后两个同理
二维数组存放在内存中按一维数组线性存放
一位数组表示二位数组
int H=100,W=100;
int a[H][W];
int aa[H*W];
for(int y = 0;y < H;y++)
for(int x = 0;x < W;x++)
aa[y*W+x]==a[y][x];
Wiki-指针
内存地址 &a[i] == a+i
间接引用 (间接寻址)
int n,a[100];
int *p;
p = &a
a = *p // a[0]的值,访问指针中地址的值
*(&n)
*(a+i)
偏移
int a[100];
int *p;
p = a// a 是数组a的首地址,数组名就是地址
p[i] // 等于a[i] 的地址,向后偏移 i 个单位
地址[i]// 地址向后偏移 i 个单位
&a[i] == a+i == p+i == &p[i]
a[i] == *(a+i) == *(p+i) == p[i]
二维数组与指针
int aa[3][4];
aa 为二级地址
aa 是指向二位数组第零行的一整行首地址
aa + 1 指向二位数组第一行的一整行首地址
**aa == aa[0][0];
*aa == &aa[0][0];
*aa[1] == a[1][0];
delete
delete本身会自动检查对象是否为空.如果为空,就不做操作…
语法糖
默认的时候,cin与stdin总是保持同步的,也就是说这两种方法可以混用,而不必担心文件指针混乱,同时cout和stdout也一样,两者混用不会输出顺序错乱。正因为这个兼容性的特性,导致cin有许多额外的开销,如何禁用这个特性呢?只需一个语句std::ios::sync_with_stdio(false)
虽然经常用但还是记不住,习惯全局数组默认为零了
当数组作为实参传递给函数的时候,将退化为同类型的指针,再传递指针的值。
因此,在函数中修改数组值时,修改的是真的值。