static全局变量与普通全局变量的区别?static局部变量与普通局部变量的区别?static全局函数与普通全局函数的区别?

1.static全局变量只初使化一次,防止在其他文件单元中被引用;

2.static局部变量只被初始化一次,下一次依据上一次结果值;

3.static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

C语言中讲讲static变量和static函数有什么作用
static关键字有两种意思,你看上下文来判断

1,表示变量是静态存储变量 
表示变量存放在静态存储区. 
2,表示该变量是内部连接 
(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static) 
,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).

当static加在函数前面的时候 
表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数. 
不加static的函数默认为是全局的. 
也就是说在其他的.cpp中只要申明一下这个函数,就可以使用它.

1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
    答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
    从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
    static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
    static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
    static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
    static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2、如何引用一个已经定义过的全局变量?
     答:extern
     可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间 会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
    答:可以,在不同的C文件中以static形式来声明同名全局变量。
    可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

时间: 2024-10-10 15:17:20

static全局变量与普通全局变量的区别?static局部变量与普通局部变量的区别?static全局函数与普通全局函数的区别?的相关文章

static全局变量与普通的全局变量的区别

(1)static全局变量与普通的全局变量有什么区别?(2)static局部变量和普通局部变量有什么区别?(3)static函数与普通函数作用域有什么不同?(4)static函数与普通函数有什么区别? (1)static全局变量与普通的全局变量有什么区别?答:全局变量的说明之前再加以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,

C++ static 、extern以及全局变量之间的相关逻辑

全局变量,就是指那些定义在函数之外的变量,当然也是定义在类之外的变量. (1)全局变量会被自动初始化,函数中的变量不会被自动初始化,类中定义的那些成员变量(内建)也不会自动初始化.那么这里有一个疑问,为什么要这样设置?并且为什么,在进程内存区中,分为初始化了的全局变量.静态变量,和未初始化的全局.静态变量. (2)全局变量如果加上static关键字,事情将会变得很奇妙. 我们知道,全局变量理论上是指应用程序级别的全局.普通的全局变量是面向整个程序的,当各个文件各自编译,然后链接成一个可执行程序之

C++中的全局变量、普通局部变量和静态局部变量的区别

在C++中,我们经常难以说清楚全局变量.局部变量和静态局部变量的区别.本博客从变量存储特性和标识符作用域两个角度区分这三个变量. 首先,我们来看看C++程序的内存区域是如何分配的. 从上图,我们可以看到,C++程序的内存区域分为代码区.全局数据区.堆区和栈区.其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了.而普通局部变量存放在栈区,它在程序进入声明的代码块时生成,在结束代码块时删除. 其次,从标识符作用域的角度,我们可以认为: 1. 全局变量和静

php7中之局部变量,全局变量,超全局变量用法和区别

我们在使用php函数得时候遇到 ,局部变量,全局变量,超全局变量,如何灵活运用,php7中之局部变量,全局变量,超全局变量用法和区别? 1,局部变量 局部变量是在函数体内得变量,不能用外部得变量得值,只有当局部变量得值定义为全局变量才能使用外部变量得值 $a=1 function jj() { echo $a; } jj(); 2.全局变量 申明在函数外得变量,可以全局使用,使用关键词 global //global $a;$a="www.96net.com.cn";function

静态全局变量,静态局部变量,动态局部变量

静态全局变量(static):就是对当前.m里面的方法都能够使用的变量.每一次调用的时候,自动使用上一次调用时的结果.因为在静态分配区只分配一块内存地址,数值递加. 静态局部变量(static):和全局变量同理,每次都是自动存储运行后的值,下一次运行时直接拿出来用,也是只有一个地址.在整个程序运行期间都不释放. 动态局部变量:经常用到的,比如int a = 10;这时候a就是动态局部变量.每一次运行 程序到这个地方的时候,临时分配一块地址,当这个方法运行完时,地址就收回了:当下次再重新调用这个方

实例变量,局部变量,全局变量,静态全局变量

摘抄网上的 定义: 实例变量:定义在一个类的各个内部方法之外,是内部方法共享的变量 局部变量:定义在方法之中的变量,但是这个方法使用的变量,其他方法和类没法使用. 全局变量:也称为外部变量,它是在函数外部定义的变量,一个程序的所有的java源文件都可用. 静态全局变量:一程序由多个java源文件组成时,可以用静态全局变量指定某一个java源文件,仅这个java文件可用这变量. 1 int a,b; //外部变量 2 static int c;//静态外部变量 3 4 public class S

线程共享全局变量和私有全局变量

共享全局变量实例: #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h> int key=100; void *helloworld_one(char *argc) { printf("the message is %s\n",argc); key=10; printf("key=%d, the child is %u\n&

const成员函数,内联函数,友元函数,static成员

原文链接:https://blog.csdn.net/qq_38646470/article/details/79795538专栏链接:https://blog.csdn.net/column/details/20026.html[TOC]#1.const成员函数const修饰成员函数在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变. class Date { public : void Display () { c

函数指针和指针函数的区别

一. 在学习arm过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量. 表示