我的C语言学习心得
位、字节和字
位(bit):可以容纳两个值,0或1
字节(byte):一个字节是8位
字(word):根据电脑而定,原始的Apple机是8位,现在的计算机是32位或64位
- 不同的数据类型在不同的计算机中占用不同的字节,如int在32位平台的内存中占四个字节,而在16位平台的内存中占两个字节
i++与++i的区别
在for循环中,二者的实现结果是一样的,不同的是++i的速度更快,因为编译器不需要保存临时变量i,只有在做非常大的循环的时候才可能注意到这一点速度差异。
{
int a = 0;
int b = ++a; //结果是 a = 1; b = 1;
}
{
int a = 0;
int b = a++; //结果是 a = 1; b = 0;
}
i++ :先引用后增加,先在i所在的表达式中使用i的当前值,后让i加1
++i :先增加后引用,让i先加1,然后在i所在的表达式中使用i的新值
存储类
5种存储类
存储类 | 时期 | 作用域 | 链接 | 声明方式 |
---|---|---|---|---|
自动 | 自动 | 代码块 | 空 | 代码块内 |
寄存器 | 自动 | 代码块 | 空 | 代码块内,使用关键字register |
具有外部链接的静态 | 静态 | 文件 | 外部 | 所有函数之外 |
具有内部链接的静态 | 静态 | 文件 | 内部 | 所有函数之外,使用关键字static |
空链接的静态 | 静态 | 代码块 | 空 | 代码块内,使用关键字static |
自动存储类:属于自动存储类的变量具有自动存储时期、代码块作用域和空链接。默认情况下,在代码块或函数的头部定义的任意变量都输入自动存储类。也可使用关键字auto显式的表达,如下所示:
int main(void)
{
auto int plox; // 等效于 int plot;
}
寄存器变量:寄存器变量多是存放在一个寄存器而非内存中,所以可以比普通变量更快的被访问和操作,但是寄存器是没有地址的。因此,除了无法获得寄存器变量的地址,在其它许多方面,寄存器变量和自动变量是一样的。通过使用关键字register可以声明寄存器变量。
具有外部链接的静态变量: 具有外部链接的静态变量具有文件作用域、外部链接和静态存储时期。这一类型有时被称为外部存储类(external storage class),这一类型的变量被称为外部变量(external variable)。把变量的定义声明放在所有函数之外,即创建了一个外部变量。在函数中使用外部变量时,通过关键字extern来再次声明它。如果变量是在别的文件中定义的,必须使用关键字extern来声明该变量。
具有内部链接的静态变量: 这种存储类的变量具有静态存储时期、文件作用域及内部链接。通过使用关键字static在所有函数外部定义。具有内部链接的静态变量只可以被与它在同一个文件中的函数使用。
空链接的静态变量: 用于具有代码块作用域的变量声明。使用关键字static进行声明。