c语言static?

Python07

c语言static?,第1张

您好,你的问题,我之前好像也遇到过,以下是我原来的解决思路和方法,希望能帮助到你,若有错误,还望见谅!展开全部

static 用来说明静态变量

1、如果是在函数外面定义的,那么其效果和全局变量类似,即static说明的变量可以在当前c程序文件中使用。

2、如果是在函数内部定义的,那么这个变量只初始化一次,即使再次调用这个函数,这个static变量也不会再次被初始化,于是,这个变量的取值就会一直保存着,我们再次调用该函数时,仍是保存的上一次函数调用时保存的结果。

扩展资料:

c语言中的static有三个主要作用:

1、隐藏性。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

2、static可以保持变量内容的持久,当static定义变量在函数内部时,改变量值的生命周期和全局变量相同。非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!

通俗的说静态数组就是在定义数组的时候,由操作系统分配的空间,比如

int

a[10]

这就是在定义时由系统给你分配了10个int类型的空间,这个空间是可以初始化的,比如

int

a[10]

=

{1,

2,

3,

4,

5,

6,

7,

8,

9,

10};

那么在这个定义之后,系统会首先分配10个int类型的存储空间,然后把大括号里面的数字分别的,按顺序放到这10个空间里。你所做的只是写这么一句,而数组赋值的操作就由系统完成了。当然,初始化与否看你的需求,初始化不是强制性操作,想初始化就初始化,不想也没问题,还是上面的例子继续:

int

a[10]

这里定义了,但是没初始化,这没有任何问题,以后你可以自己往里面赋值,比如

a[1]

=

8

a[5]

=

3

或者

for(int

i

=

0

i

<

10

i++)

a[i]

=

i

等等

对于动态数组,不能被初始化,因为动态数组在定义时只是个指针,比如

int

*a

这里变量a只是个指向int类型的指针,而不是数组。动态分配有10个int类型元素的数组,如下:

a

=

(int)

malloc(10*sizeof(int))

很明显,指针a在定义的时候不能被初始化,比如这样写就是错误的:

int

*a

=

{1,2,3,4,5,6,7,8,9,10}

/*

错误!

*/

因为a是只有4个字节的指针,没有可用的存储空间给需要初始化的变量。

所以,静态数组从语法上来说允许被初始化。作为程序员来说,你可以初始化静态数组,也可以不初始化,由你决定。

static的作用有三条。

一、第一个作用:隐藏。

当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

二、static的第二个作用是保持变量内容的持久。

存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。

三、static的第三个作用是默认初始化为0。

其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。

请添加详细解释