精华内容
下载资源
问答
  • #include "stdafx.h" #include <iostream> #include <string> using namespace std;...//全局变量,文件作用域 ...//为全局变量i赋值 ...//局部变量,局部作用域 i=7; ...
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    int i;//全局变量,文件作用域
    int _tmain(int argc, _TCHAR* argv[])
    {
    	i=5;//为全局变量i赋值
    	{
    		int i;//局部变量,局部作用域
    		i=7;
    		cout<<i<<endl;//输出7
    	}
    	cout<<i<<endl;
    	system("Pause");//输出5
    	return 0;
    }

     

    展开全文
  • https://blog.csdn.net/qq_33266987/article/details/51965221
    展开全文
  • C++ 全局变量和局部变量

    千次阅读 2015-08-01 11:26:13
    一:为什么静态成员变量要通过类外初始化赋值? 当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员...

    一:为什么静态成员变量要通过类外初始化赋值?

    当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。

    静态数据成员的用途之一是统计有多少个对象实际存在。

    静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在够造函数中初始化该成员,因为静态数据成员为类的各个对象共享,那么每次创建一个类的对象则静态数据成员都要被重新初始化。)

     

    二:C++ class 全局变量的初始化

    0class类型的全局变量的构造函数在main()调用之前完成,有可能破坏构造函数中暗含的假设条件,例如gflags尚未初始化等。

    1禁止使用class类型的全局变量(包括STL中的vector,string等)

         观点1:他们的初始化有可能导致构造出现问题。

         观点2:全局变量的构造和析构和初始化操作的调用顺序只是被部分规定,每次生成有可能变化。对于不同编译单位的全局变量,其初始化的顺序没有任何的保证,因此对不同编译单位里的全局变量,在它们的初始化顺序之间建立依赖性都是不明智的。

    2 永远不要使用函数返回至初始化全局变量。

    3 如果要使用class全局变量,就使用单例模式(singleton pattern)。

     静态成员变量视作全局变量,所以也不能是class类型 

     

    三、static全局变量/全局变量,static函数/普通函数,函数中static变量/函数中的变量,类中的static成员变量/类中的变量

    static Global variable: 文件作用域:只在声明的文件中有效,其他源文件中不可见;同时有了static的生命周期
    Global variable:文件作用域:可以加上extern 声明为外部变量,跨文件作用域

    static (Global) Function: 有文件作用域,只在本文件中使用
    Global Function:无文件作用域

    static Member (in Function) variable:函数调用完成后,变量保存状态,再次调用函数,不会重新分配空间
    Member(in Funcition) variable:函数内的生命周期

    static Member(in Class) variable: 属于类范围,
    Member(in Class) variable:属于类派生的特定对象,生命周期和对象一致

    从作用域上来区分它们:

    1. 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。
    1. 局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
    1. 静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
    1. 静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。


    从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。
    从以上分析可以看出,把 局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。
    展开全文
  • C++ 变量作用域1、名词解释2、全局变量和局部变量3、局部变量的值会覆盖全局变量的值4、我们怎么才能在局部变量和全局变量名称相同的情况下调用全局变量呢?5、初始化局部变量和全局变量 1、名词解释 作用域是程序的...

    1、名词解释

    作用域是程序的一个区域,一般来说有三个地方可以定义变量:
    在函数或一个代码块内部声明的变量,称为局部变量。
    在函数参数的定义中声明的变量,称为形式参数。
    在所有函数外部声明的变量,称为全局变量。

    2、全局变量和局部变量

    在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
    全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。
    在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。
    下面的实例使用了全局变量和局部变量:

    #include <iostream>
    using namespace std;
    
    // 全局变量定义
    int g;
    int main()
    {
    	// 局部变量定义并初始化
    	int a=10, b=20;
    
    	g = a + b; //g=30
    	cout << g; //30
    	return 0;
    }
    

    3、局部变量的值会覆盖全局变量的值

    在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例:

    #include <iostream>
    using namespace std;
    
    // 全局变量定义并初始化
    int g = 20;
    int main()
    {
    	// 局部变量定义并初始化
    	int g = 10;
    	cout << g; //10
    	return 0;
    }
    

    4、我们怎么才能在局部变量和全局变量名称相同的情况下调用全局变量呢?

    4.1、可通过函数引用到全局变量

    #include <iostream>
    using namespace std;
    
    //定义并初始化全局变量
    int a = 10;
    int func() {
    	return a;
    }
    int main()
    {
    	//定义并初始化局部变量
    	int a = 20;
    	cout << "全局变量为: " << func() << endl;   // 10
    	cout << "局部变量为: " << a << endl;     // 20
    	return 0;
    }
    

    2、可通过域名(’ : : ')引用到全局变量
    方法一:全局变量和和局部变量同名时,可通过域名在函数中引用到全局变量,不加域名解析则引用局部变量

    #include <iostream>
    using namespace std;
    
    int a = 10;
    int main()
    {
    	int a = 20;
    	cout << "全局变量为: "<<::a << endl;   // 10
    	cout <<"局部变量为: "<< a << endl;     // 20
    	return 0;
    }
    

    5、初始化局部变量和全局变量

    当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值:

    数据类型初始化默认值
    int0
    char’ \0 ’
    float0
    double0
    pointerNULL

    正确地初始化变量是一个良好的编程习惯,否则有时候程序可能会产生意想不到的结果。

    当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。如果我们没有对局部变量进行初始化,那么程序会报错。

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	// 局部变量定义但是不初始化
    	int g;
    	cout << g; 
    	return 0;
    }
    

    报错:
    报错

    #include <iostream>
    using namespace std;
    
    int a ;
    char b;
    float c;
    double d;
    bool e;
    int* f;
    int main()
    {
    	cout <<	"int: " <<a<<endl;
    	cout << "char: "<<b<<"!!!"<<endl; //b='\0' 而'\0'是空格符
    	cout << "float: "<<c<<endl;
    	cout << "double: "<<d<<endl;
    	cout << "bool: "<<e<<endl;
    	cout << "pointer: "<<f<<endl;
    	if (e)
    		cout << "true";
    	else
    	{
    		cout << "false";
    	}
    }
    

    result

    展开全文
  • C++局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。下面是一个实例: #include <iostream> using namespace std; // 全局变量声明 int g = 20; int main () { //...
  • C++全局变量和局部变量详解

    千次阅读 2017-02-07 14:43:51
    程序中的变量由于定义的位置不同,在程序中的可见程度是不一样的。所谓“可见”,指的是定义的这个变量可以被使用。 一.变量的存储机制与C++的内存布局 要了解程序中使用变量的属性,必须先了解变量的...全局变量
  • C/C++全局变量和局部变量作用域问题

    千次阅读 2017-05-25 15:57:42
    C++局部变量可以和全局变量重名吗?  这是一个作用域的问题。一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是从声明的那一点开始,直到这个声明所在的块结束为止(一个块就是由{}围...
  • C/C++全局变量和局部变量重名问题

    千次阅读 2018-04-12 14:30:03
    局部变量内可以利用作用与符::来访问全局变量;如下代码:#include&lt;iostream&gt; using namespace std; int a = 1; int func() { int a = 0; cout &lt;&lt; a &lt;&lt; endl; ...
  • 做题时发现了如下关键代码的一些问题,请看 #include“iostream” using namespace std;...//局部变量 return 0; } 编译运行后发现溢出错误。 #include“iostream” using namespace std; int a[1000000]...
  • 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内。当我们...
  • C++ 全局变量局部变量、静态全局变量、静态局部变量的区别 C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域...
  • 全局变量和局部变量 全局变量的作用域是**整个程序**。 局部变量的作用域就是定义它的那个函数,如果此**函数结束运行**,那么这个局部变量就会被**销毁**。 语句块变量就是一个{}里面的变量。ps:语句块主要是一...
  • C++ 全局变量、静态全局变量局部变量、静态局部变量的使用,整理表格如下:分类 全局变量 静态全局变量(static) 局部变量(auto) 静态局部变量(static) 作用域 全局作用域(extern) 文件作用域(当前文件) 局部作用域...
  • 今天研究了一下c++中全局变量和局部变量在初始化时的赋值情况,发现全局变量和局部变量会有所不同,下面是我的测试结果: 全局变量: #include &lt;iostream&gt; using namespace std; float testFloat; ...
  • 从上面的定义来看C++全局变量局部变量就很好区分了。局部变量只能被函数内部或者代码块内部的语句使用,而全局变量的值在程序的整个生命周期内都是有效的。全局变量可以被任何函数访问,在整个程序中都是可用的。 ...
  • 全局变量的默认作用域是整个程序,也就是所有的代码文件,包括源文件(.c文件)头文件(.h文件)。如果给全局变量加上 static 关键字,它的作用域就变成了当前文件,在其它文件中就无效了。我们目前编写...
  • 全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。 全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上没有什么不同。区别在于非静态...
  • c++全局变量和静态局部变量初始化的时间 1.全局变量初始化在主函数之前 2.静态局部变量初始化在第一次调用这个静态局部变量之前 #include <iostream> using namespace std; class A { public: A(int a):m_a...
  • 1、实践是检验真理的唯一标准,废话不多说,上代码。 #include <QCoreApplication> #include <...// 定义变量类 class Variable { public: Variable(const string& type) :_type(typ...
  • C和C++全局变量局部变量,静态变量和常量

    千次阅读 多人点赞 2016-08-14 22:54:15
    C/C++中常量,静态变量,全局变量和局部变量的区别和作用。把局部变量改变为静态局部变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态全局变量是改变了它的作用域, 限制了它的使用范围。因此...
  • C++全局变量和局部变量的区别

    千次阅读 2019-08-20 16:09:38
    全局变量作用于整个程序; 局部变量作用于当前函数。 2.内存分配: 全局变量内存分配在自由分配区; 局部变量分配在栈区。 3.生存周期不同 全局变量:跟随系统的创建而创建,销毁而销毁; 局部变量:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,708
精华内容 43,883
关键字:

c++全局变量和局部变量

c++ 订阅