①最宽恒大量的关键字----auto
在C语言中,`auto`是一个关键字,用于声明自动变量。那么什么是自动变量呢?简单来说,自动变量是在函数内部定义的变量,它的生命周期与所在的代码块相同。
当我们在函数内部声明一个变量时,如果没有使用任何存储类别指定符(如`static`),那么这个变量就是自动变量。自动变量的特点是,它们在函数被调用时被创建,当函数执行完毕或离开变量所在的代码块时,自动变量会被销毁。
为什么要使用自动变量呢?因为自动变量可以提供临时存储空间,用于在函数执行期间存储临时的计算结果或中间值。当函数执行完毕时,自动变量所占用的内存会被释放,不会占用额外的资源。
需要注意的是,自动变量的作用域仅限于所在的代码块内部。这意味着,自动变量在代码块外部是不可见的,其他函数无法访问它们。这种封装性使得自动变量更安全,不容易被误用或被其他函数意外修改。
总结一下,`auto`关键字用于声明自动变量,它具有以下特点:
-在函数内部定义
-生命周期与所在的代码块相同
-提供临时存储空间
-作用域仅限于所在的代码块内部
在现代的C语言编程中,由于自动变量是默认的存储类别,通常不需要显式使用`auto`关键字进行声明,编译器会默认将没有存储类别指定符的变量视为自动变量。因此,在实际编程中,我们很少会直接使用`auto`关键字。
②.最快的关键字----register
计算机中有一个叫作寄存器的小而快速的存储区域,它位于CPU内部。寄存器的访问速度非常快,因此,将变量存储在寄存器中可以提高程序的执行速度。
使用`register`关键字声明的变量被称为寄存器变量。通过将变量声明为寄存器变量,我们告诉编译器将该变量存储在寄存器中,以便在程序执行过程中更快地访问它。
需要注意的是,寄存器变量具有一些限制:
-由于寄存器的数量是有限的,所以不是所有的变量都能存储在寄存器中。编译器会根据算法和优化策略决定哪些变量可以存储在寄存器中。
-`register`关键字只是向编译器提供一个建议,告诉编译器将变量存储在寄存器中。实际上,编译器可能会忽略这个建议,因为它可能认为将变量存储在寄存器中并不会带来性能的显著提升。
由于现代的编译器已经非常智能,能够自动进行变量的寄存器分配,所以在实际编程中很少需要显式地使用`register`关键字。编译器会根据需要自动将变量存储在寄存器中,以提高程序的执行效率。
总结一下,`register`关键字用于声明寄存器变量,它具有以下特点:
-将变量存储在CPU的寄存器中
-可以提高程序的执行速度
-编译器会根据算法和优化策略决定是否将变量存储在寄存器中
-在现代编程中,很少需要直接使用`register`关键字,编译器会自动进行变量的寄存器分配。
③.最名不副实的关键字----static
不要误以为关键字static很安静,其实它一点也不安静。这个关键字在C语言里主要有两个作用,C++对它进行了扩展。
修饰变量
第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它。想要使用就得在前面再加extern***。恶心吧?要想不恶心,很简单,直接在文件顶端定义不就得了。
静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。举个例子:
static示例1那么,i,和j运行结果是多少呢?
修饰函数
第二个作用:修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
关键字static有着不寻常的历史。起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。
转载请注明:http://www.0431gb208.com/sjszlfa/7761.html