C语言笔记
寄存器变量
计算机的数据运算是在寄存器中进行的,如果把变量放在寄存器中可以节省一定的时间。
通过在动态变量的定义中使用关键字register,可以请求编译器将该变量存储在寄存器中。
关键字register只能用于简单的数值变量,而不能用于数组、结构、静态变量、外部变量,不能定义指向寄存器变量的指针。
定义示例:register int x;
有的编译器会自己优化,设置变量作为寄存器变量。
注:如果寄存器没有空间,则不会放在寄存器中,而是默认的内存中。
以我目前所学,估计用处不大。
数组初始化
int x[10];
如果不是全局变量或者静态变量,此时数组元素均为垃圾数。
全局变量、静态变量默认为零,但是不同的编译器可能有所不同。
int x[10]={0};
这样数组全部都被置为0。
int x[10]={1};
第0个元素是1,其余均为0。
数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。
运算过程中变量超出范围
几个变量做运算时,实际上创建了一个临时变量来存储得到的值,然后再转换成目标变量的类型。
比如说2个int类型变量相乘,就有可能超出数据范围。现在想起来感觉是理所当然的,不过当时真的没有发觉。
int i,j; long long sum; sum+=i*j;
这样就有可能出错,也许是被long long 蒙蔽了眼睛。
补充:
这种情况下就需要用到类型转换或者类型标识。
比如说:
long bigInterval = 7 * 30 * 24 * 60 * 60 * 1000;
应该写成:
long bigInterval = 7L * 30L * 24L * 60L * 60L * 1000L;
另之前一直弄错了 int 类型的范围,约等于 -2*10^9~2*10^9 。。误以为是10次方,都是泪啊啊啊啊