c语言中静态变量是怎么用的
static在c语言中是私有、静态意思。用于在函数中声明“静态变量”用,在每一次调用后,该变量并不在函数返回时立即释放,变量中保存的值,可以保留到下一次调用时继续有效。私有就是隐藏。static函数只能声明后的本文中调用。
static 变量 静态变量的类型 说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。
静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。在C语言中,static关键字的作用如下:在修饰变量的时,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
C语言静态变量初始化的新手问题
1、静态变量在编译的时候初始化,所以初值必须是常量(可以是常数、定义成常数的宏、C++编译器中用const修饰的常量),静态变量不能用变量赋初始值,但在运行时是可以用变量赋值的。
2、很明显,指针a在定义的时候不能被初始化,比如这样写就是错误的:int*a={1,2,3,4,5,6,7,8,9,10};/*错误!*/ 因为a是只有4个字节的指针,没有可用的存储空间给需要初始化的变量。
3、C++语言中,静态局部变量,是指定义在函数内部,具有static修饰的变量。
4、这与编译器的处理方法有关。静态变量生命期与程序相同,未调用函数前,内存分配已完成。是否同时也赋了值,不能肯定。可能在第一次调用时赋值,也可以在开辟内存的时候就已经赋了值。
5、此外,static的最主要的含义是,变量存放在静态存储区,所以它具备持久性和默认值0。C语言有它的一些潜规则,这些规则并不是那么好掌握。在对你的回答中,我也学到了东西,呵呵。
6、可能是因为其它文件有些地方的调用把全局变量存储区的内存改变了。你可以直接打印orange试试呢。打个断点也好调嘛。
C语言静态变量问题?
静态变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出,D是错误的。
静态变量的静态:变量占用的存地址不释放,也就是说它的地址它从头到尾一内直占着,容不给其他内存单元占用而已,其本身的值是可以改变的。
用static声明的变量是静态变量,比如static int a =4;这个a的初始值为4(仅仅是初始值),并且这个变量是一直存在的。几个a并不是同一个a,我们可以把程序中的a改一下名字,方便理解。
c语言中静态变量作常量使用,用于存储常数。可用const,constant或final等关键字标识,其值就会在编译时设定,并且无法在运行时改变。
C语言里的静态数组初始化问题
1、不是不能初始化,是初始化的不对。另外,数组最好用memset初始化。(1)在定义数组时对数组元素赋以初值。
2、一般的静态变量是不用初始化的,默认为0 例如:static int a[10];//已经全0 需要进行其他值的初始化跟一般的数组初始化一样,进行遍历赋值就可以了。
3、ANSI/ISO C允许对声明的非静态数组也进行一次性初始化。所以在支持ANSI/ISO C标准的编译环境下,函数块内写 static int a[3] = { 2, 4, 5 };和 int a[3] = { 2, 4, 5 };都对。
4、一般对数组初始化可以用以下方法实现:(1)在定义数组时对数组元素赋以初值。如:static int a[10]={0,1,2,3,4,5,6,7,8,9};经过上面的定义和初始化后,a[0]=0,a[1]=1,…,a[9]=9。
5、数组在定义时并没有强制要求要初始化,可以需要时再赋值 综上,C语言中数组可以不初始化 其次,在C语言中,数组归于布局数据类型。一个数组能够分化为多个数组元素,这些数组元素能够是根本数据类型或是布局类型。
6、静态变量生命期与程序相同,未调用函数前,内存分配已完成。是否同时也赋了值,不能肯定。可能在第一次调用时赋值,也可以在开辟内存的时候就已经赋了值。从程序设计考虑,假定内存分配时尚未完成赋值,以免副作用。