C语言中,静态函数和非静态函数的区别主要体现在以下方面:
-
可见性:静态函数只能在当前文件内使用,不能被其他文件调用,而非静态函数可以被当前文件以外的其他文件调用,具有全局可见性。
-
生命周期:静态函数在程序运行期间一直存在,不会被释放,而非静态函数则是在被调用时动态地创建并在函数返回时被释放,拥有较短的生命周期。
-
内存分配:非静态函数调用时从堆栈中动态分配内存空间,函数返回时空间被释放,而静态函数分配内存空间仅一次,且在程序运行期间一直存在,调用时并不会重新分配内存空间。
-
其他:静态函数不能被其他文件调用,因此可以被认为是一种信息隐藏方法,能够有效地维护代码的安全性。同时,在一些对性能要求较高的场景,静态函数相比非静态函数性能更好,因为静态函数的调用时间更短。
需要注意的是,静态函数和非静态函数的区别只在函数定义所在文件中有效,因此同一函数在不同文件中的定义可以是静态或非静态的,具体取决于定义该函数的程序员。
以下是一段简单的程序,用于演示静态函数和非静态函数的区别:
#include <stdio.h> void non_static_func() { int num = 0; printf("non_static_func num: %d\n", num); num++; } static void static_func() { static int num = 0; printf("static_func num: %d\n", num); num++; } int main() { int i; for (i = 0; i < 3; i++) { non_static_func(); static_func(); } return 0; }
通过运行程序,我们可以看到以下结果:
non_static_func num: 0 static_func num: 0 non_static_func num: 0 static_func num: 1 non_static_func num: 0 static_func num: 2
我们可以看出,non_static_func
函数每次被调用时,变量num
的值始终为0,并没有被保留下来。而static_func
函数每次被调用时,变量num
的值可以被保留下来,并在下次调用时继续使用。这是因为static_func
函数中的变量num
是静态变量,其生命周期保持到程序结束,而non_static_func
函数中的变量num
是一个普通的自动变量,其生命周期仅限于函数调用过程中。
因此,我们可以看出,静态函数中的静态变量可以在多次函数调用之间保持变量值不变,而非静态函数中的变量则不会保留之前的值。这是静态函数与非静态函数的一个主要区别。
如果把静态函数里面的静态变量变成普通变量,那么打印会跟普通函数的一样。
标签:non,函数,静态,C语言,num,static,func From: https://www.cnblogs.com/cyj22/p/17805304.html