c/c++全局变量与局部变量

在c/c++中变量是最基本的成员,也是我们最常用的东西,变量大体上分为全局变量与局部变量两种,全局变量是在整个程序中都可以使用,而局部变量只能在最接近定义的一组大括号内使用,总的来说,在c/c++里面,变量只有定义了并在其生命周期内才能使用。说得有点抽象,给大家看个例子吧。

a、全局变量

#include<iostream>
using namespace std;

int a = 0;

void demo()
{
	a++;
}

int main()
{
	for(int i = 0; i < 5; i++)
	{
		demo();
		cout << "a = " << a << endl;
	}

	return 0;
}

输出结果如下

   分析:我们可以看到,在程序一开始定义了a,然后我们在小demo()函数和main()主函数里面都使用了这个a,这个就是全局变量,同时也验证“变量只有定义了才能使用”,假如我们写成如下程序:

#include<iostream>
using namespace std;

void demo()
{
	a++;
}

int a = 0;

int main()
{
	for(int i = 0; i < 5; i++)
	{
		demo();
		cout << "a = " << a << endl;
	}

	return 0;
}

编译出错,提示为:

C:\Users\Administrator\Desktop\Demo\demo.cpp(6) : error C2065: ‘a‘ : undeclared identifier

意思就是说程序不认识第六行里面的a,也就是demo()函数中“a++;”里的a,因为我们把a定义在了demo()函

数下面,我们还没定义a就在demo()函数里面使用a,编译器当然不认识喽。

b、局部变量

#include<iostream>
using namespace std;

void demo()
{
	int a = 0;
	cout << "a = " << a << endl;
}

int main()
{
	demo();

	for(int i = 0; i < 1; i++)
	{
		int b = 1;
		cout << "b = " << b << endl;
	}

	return 0;
}

运行结果如下

对比一下如下程序及程序编译结果

#include<iostream>
using namespace std;

void demo()
{
	int a = 0;
}

int main()
{
	demo();

	for(int i = 0; i < 1; i++)
	{
		int b = 1;
	}

	cout << a << endl << b << endl;

	return 0;
}

程序编译结果为:

C:\Users\Administrator\Desktop\Demo\demo.cpp(18) : error C2065: ‘a‘ : undeclared identifier

C:\Users\Administrator\Desktop\Demo\demo.cpp(18) : error C2065: ‘b‘ : undeclared identifier

意思就是说编译器不认识“cout << a << endl << b << endl;”这句话里的a和b变量

    分析:图图之前说过,局部变量只能在最接近它定义的一组大括号里面使用,我们来看a,最接近定义变量a的一组大括号就是demo()函数的大括号,所以我们只能在demo()函数里面使用a,同样的,我们只能在for循环语句里面使用b。同时在看看我们一言以蔽我们变量作用域的一句话“变量只有定义了才能使用”,我们在demo()函数中定义了a,那么出了这个demo()大括号,它的生命周期就结束了,就会被系统销毁,a也就不存在了,既然不存在了,我们使用cout
<< a << endl << b << endl;编译器当然不认识a和b了。

       请大家一定要记住“变量只有定义了,并在其生命周期内才能使用” 

c/c++全局变量与局部变量

时间: 2024-09-30 16:14:03

c/c++全局变量与局部变量的相关文章

C语言之全局变量和局部变量

全局变量和局部变量的简介(tips:很重要 牢记) 全局变量:就是定义在函数外的变量 全局变量可以在任意函数中使用 生命周期:程序一启动就开辟空间,直到程序退出才回收 全局变量不允许同名 局部变量:就是定义在函数内的变量 局部变量只能在它声明的位置开始到它所在的代码块结束 生命周期:它所在的代码块结束就回收 不同的作用域里,局部变量可以同名 tips:代码例子如下 #include <stdio.h> int globeNum = 10;   //全局变量 void test1(){ prin

c语言全局变量和局部变量问题汇总

1.局部变量是否能和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,须要使用"::" 局部变量能够与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量.对于有些编译器而言,在同一个函数内能够定义多个同名的局部变量,比方在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内. 2.怎样引用一个已经定义过的全局变量? 答:extern 能够用引用头文件的方式,也能够用externkeyword,假设用引用头文件方式来引用某个在头文件

JavaSCript全局变量与局部变量

今天公司一个实习小妹子问我两段js代码的区别: [javascript] view plain copy <script type="text/javascript"> var a = "Hello"; function test(){ var a; alert(a); a = "World"; alert(a); } </script> [javascript] view plain copy <script ty

Javascript之全局变量和局部变量部分讲解

以此文作为自己学习的一个总结. 关于全局变量和局部变量的一句简单的定义:在函数外声明的变量都为全局变量,在函数内声明的为局部变量. 一.局部变量和全局变量重名会覆盖全局变量 1 var a = 1; 2 function test1() { 3 var a = 2; 4 alert(a); 5 } 6 test1();// 2 这里的函数中的定义的a是局部变量,它的作用域为函数{}之间,函数外定义的a为全局变量,它的作用域为整个程序(描述有点不准确).在函数中的局部变量和全局变量重名,局部变量会

JS关于全局变量跟局部变量的总结

一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可以看看以下几个例子: 1 <script> 2 function test2(){ 3 alert ("before for scope:"+i); // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行) 4 5 // 此时i的值是underfine

JS的全局变量跟局部变量

一.Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是function块,而for.while.if块并不是作用域的划分标准,可以看看以下几个例子: <script> function test2(){ alert ("before for scope:"+i); // i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行) // 此时i的值是underfined for(var

关于js中全局变量和局部变量的寄到小题

往往最基本的也是最根本的. 这里有三道关于全局变量和局部变量的小题,供诸位一阅. 知识点: (1)在最外层声明的是全局变量 (2)在函数内声明的是局部变量 (3)在函数体内部,但是没有用var声明的变量也是全局变量 第一题: var a = 10;function fun(){var a = "global";}console.log(a); 第二题: var a ;function fun(){a = "global";} fun();console.log(a)

Java——全局变量与局部变量的区别

在Java程序中,会根据变量的有效范围将变量分为成员变量和局部变量,通常类的属性成为累的全局变量(成员变量),成员变量在整个类中都有效,在类的方法体中定义的变量称为局部变量,局部变量只在当前代码体中有效不能用于类的其他方法中.成员变量可与局部变量的名字相同,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效,只取局部变量的值.举个例子: 1 public class Man{ 2 static int age=20; 3 public static void main(String[] ar

JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

“JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是将一组需求分解成一组函数与数据结构的技能. 1.函数的功能 代码重复性使用 模块化编程 2.语法: 使用函数前要先定义才能使用 函数定义有三个部分:函数名,参数列表,函数体 格式: 1 function 函数名([参数1, 参数2, ...]){ 2 3 函数执行部分; 4 5 return 表达式; 6 7

static变量,全局变量,局部变量

/* c++ static变量,全局变量.局部变量 */ #include<iostream> using namespace std; static int x=1; static int y=2; struct A { static int x; static int y; }; int A::x=3; int A::y= x;//3 为什么是3,原因在哪里 //int A::y= ::x; //1 为什么是1,原因在哪里 int main() { cout<<A::y<