1.1,最宽恒大量的关键字----auto
auto:它很宽恒大量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量 都是 auto 的。
1.2,最快的关键字---- register
register:这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内 存寻址访问以提高效率。注意是尽可能,不是绝对。
就是因为速度。寄存器其实就是一块一块小的存储空间,只 不过其存取速度要比内存快得多。
1.2.2,使用 register 修饰符的注意点
register 变量必须是 能被 CPU 寄存器所接受的类型。意味着 register 变量必须是一个单个的值,并且其长度应小 于或等于整型的长度。 而且 register 变量可能不存放在内存中,所以不能用取址运算符“&” 来获取 register 变量的地址。
1.3,最名不符实的关键字----static
1.3.1,修饰变量
第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。
静态全局变量,准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些 代码行也不能使用它。想要使用就得在前面再加 extern ***。
静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他 函数也用不了。即使这个函数运行结 束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。
举例:
static int j;
void fun1(void)
{
static int i = 0;
i++;
}
void fun2(void)
{
j = 0;
j++;
}
int main1()
{
for(k=0;k<10;k++)
{
fun1();
fun2();
}
return 0;
}
i 和 j 的值分别是什么,为什么?
i=10;j=1;i在函数内声明,是静态局部变量,定义处不销毁其之前的值;而j是静态全局变量,在子函数中,不是定义,故正常进行之后操作,改变其值
1.3.2,修饰函数
第二个作用:修饰函数。函数前加 static 使得函数成为静态函数。但此处“static”的含义 不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。
1.4.1,数据类型与“模子”
在 32 位的系统上 short 咔出来的内存大小是 2 个 byte;int 咔出来的 内存大小是 4 个 byte;long 咔出来的内存大小是 4 个 byte;float 咔出来的内存大小是 4 个 byte; double 咔出来的内存大小是 8 个 byte;char 咔出来的内存大小是 1 个 byte。
1.4.2,变量的命名规则
【规则 1-1】命名应当直观且可以拼读,可望文知意,便于记忆和阅读。
【规则 1-2】命名的长度应当符合“min-length && max-information”原则
【规则 1-3】当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。
【规则 1-4】尽量避免名字中出现数字编号,如 Va l u e 1 , Va l u e 2 等,除非逻辑上的确需要编 号。
【规则 1-5】对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名 (缩写)作为范围限定符)。(GUI_ ,etc)
【规则 1-6】标识符名分为两部分:规范标识符前缀(后缀)+ 含义标识 。非全局变量可以 不用使用范围限定符前缀。
1.5,最冤枉的关键字----sizeof
1.5.1,常年被人误认为函数
sizeof 在 计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。
1.5.2,sizeof(int)p 表示什么意思?
sizeof(int)p 表示什么意思?
留几个问题(讲解指针与数组时会详细讲解),
32 位系统下: int p = NULL;
sizeof(p)的值是多少?
sizeof(p)呢?
int a[100];
sizeof (a) 的值是多少?
sizeof(a[100])呢?//请尤其注意本例。
sizeof(&a)呢?
sizeof(&a[0])呢?
int b[100];
void fun(int b[100])
{
sizeof(b);// sizeof (b) 的值是多少?
}