十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#include iostream
创新互联公司自2013年创立以来,是专业互联网技术服务公司,拥有项目成都网站制作、做网站、外贸营销网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元安新做网站,已为上家服务,为安新各地企业和个人服务,联系电话:028-86922220
using namespace std;
int m=8;
void function()
{
int n=5;
coutmendl;
}
int main()
{
int a=10;
coutaendl;
function();
coutmendl;
return 1;
}
首先介绍一下变量吧,静态变量等就不说了,只说比较一般常见的变量
变量,都是有其生命周期的,像人一样出生,死亡
在一个函数里声明的变量,声明的时候"出生"了,这个函数结束后它也跟着死亡了
而main()函数,它也是一个函数,但是是最主要的函数,因此叫main
一个程序执行的过程,就是从main()的第一行代码执行到最后一行代码
我们现在假设有个光标指着正在运行的那一行代码,现在演示一下程序运行的过程
总是从main()开始的
main()里4行代码,
第一行a"出生"了(执行完最后一行return 1;则变量a的生命结束了)
第二行把a的值输出
第二行执行function()
1.现在光标跳到function()函数的第一行int n=5;(局部变量n出生了,并且值为5)
2.继续执行下一行代码coutmendl;至此function()函数里的代码执行完毕了,这个函数被用完了,这个函数里的局部变量n现在也死掉了(不存在了)
光标跳回到main()函数里,
继续执行下一行coutaendl;把a的值输出
下一行,把全局变量m的值输出
再执行下一行return 1;
至此main()函数也执行完毕,那么main()里的变量a也会被销毁(可以看做是main函数里的局部变量,main函数运行完了,这个变量也要消失了)
这就是程序运行的过程,就是一条一条执行main函数的语句,这过程中可能会跳到别的地方去
总结:a是main()函数里的变量,只在main里有效,且寿命和main()函数是一致的,n是function函数里的变量,只在function函数里有效,
如在main函数里操作n,或者在function函数里操作a,都是错误的,而m被放在所有函数的外面,
它是全局变量,不是属于某个函数的,所有函数都可以操作它,程序运行起来它就诞生,程序关闭了它消亡
至于子函数是否需要返回值,则完全取决于自己的需要,看下面的程序,俩对比着看
-----------------------
函数的int function1(int n),在main里执行int b=function1(a)这句话时,从main()里跳到function1()函数里,
并且function1()里产生了一个局部变量n,接受了a的值5,现在function1()函数里有个局部变量n=5;最后把值25return了回去,
25赋值给main函数里的b;
#include iostream
using namespace std;
int function1(int n)
{
return n*n;
}
int main()
{
int a=5;
int b=function1(a);
coutbendl;
return 1;
}
--------------------
函数void function2(int n),是引用,就记住只要加这个符号,那么现在n不再是一个拷贝(一个临时的局部变量),而代表着原来的数
那么main里执行function2(a);现在n代表的a本身(不是a的一个拷贝),在function2()里操作n,就是在操作main里面的a,现在n=n*n.
那么就是a=a*a,main里面的a已经变成了25,直接输出就可以了,不需要像第一个函数那样有返回值
#include iostream
using namespace std;
void function2(int n)
{
n=n*n;
}
int main()
{
int a=5;
function2(a);
coutaendl;
return 1;
}
-----------------------
子函数需不需要参数,是要声明为void还是有返回值的某种类型如int,都是在了解变量的作用域(活动范围,在什么地方有效)的基础上,
完全是根据自己的需要来确定的. 再对比着看俩程序体会一下,
#include iostream
using namespace std;
int a=8;
void function2()
{
a=a*a;
}
int main()
{
coutaendl; //输出8
function2();
coutaendl; //a的值已经是64了,输出64;
return 1;
}
---------------------------
#include iostream
using namespace std;
int a=8;
int function2()
{
return a*a;
}
int main()
{
coutaendl; //输出8
coutfunction2()endl; //a的值仍然是8,但是function2()得返回值是a*a,输出64;
return 1;
}
根据使用范围来区分的。
1。局部变量
他是 指在函数内部定义的变量 作用域为定义局部变量的函数 也就是说他只能在定义他的函数中使用
最值得注意的是 只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失
eg.
func ()
{
int x; 局部变量x的作用域 很明确
......
}
2。全局变量
在程序执行的过程中一直有效
eg.
int x=1;
func ()
{
x=x+1;
}
func1 ()
{
x=x-1;
}
main ()
{
}
由此不难看出整型x的作用范围
对于全局变量 如果在定义的时候不做初始化 则系统将自动为起赋值 数值型为0
字符型为空'\0'
全局变量的弊端 增加内存开销 降低函数的通用性
定义全局变量时 理想的位置是在文件的开头 当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该全局变量时 在函数内部对该变量使用extern 加以说明 说明他是外部的
(这里还要做详细的讲解)
eg.
main ()
{
extern int a,b;
printf ("mIn is %d\n",min(a,b));
}
int a=1,b=2;
int min (x,y)
int x,y;
{
int z;
z=xy?x:y;
return(z);
}
我还要说明的是 对外部变量的说明和对全局变量的定义不是一回事
对外部变量的说明 只是声明该变量是在外部定义过的一个全局变量 在这里引用 而对全局变量的定义则是要对起分配存储单元的
一个全局变量只能定义一次 可是却可以多次引用
*** 在同一源文件中,全局变量和局部变量同名时,在局部变量的作用域内,全局变量不起作用的。
局部变量是在某一函数内定义的变量,有效区域在本函数里。
全局变量定义在函数外,全局起作用。
1、记住一条就够了:在函数之外定义的变量就是全局变量。用static修饰的变量可以是全局的,也可以是局部的,所以说“用static修饰的变量是全局变量”是错误的。用static修饰的变量的生命周期与全局变量一样,但可见性仍分全局和局部。 2、全局变量在整个c文件中都能使用,而局部变量在其作用域内才能使用,举个例子: int f = 7;// 这个是全局变量int myadd(int a, int b){int c = a + b;// c是局部变量,只能在myadd中使用return c;}int main(void){printf("%d\n", c);// 因为c是myadd中定义的局部变量,这里会报错。printf("%d\n", f);// f是全局变量,这句是正确的。}
fun(a+fun(d)); //先里后外嘛
先fun(d) 因为main中没定义d,没局部就取全局的,d=1
fun(int p)
{
static int d=5;
d+=p;
printf("%d ",d);
return(d);
}
所以p = 1
由于fun里有局部静态int d = 5
d += p 就是 5 + 1 = 6
第一次输出就是6了
return(d); 返回6 给 fun(a+fun(d)); 就是 fun(a + 6),a是3 那就是fun(9)
fun(int p)
{
static int d=5;
d+=p;
printf("%d ",d);
return(d);
}
p = 9
d += p 为 6 + 9 = 15(前面说了d是静态int,它保存的值直到程序结束才消除,所以d保存了上面计算的5 + 1 = 6)
第二次输出为15
return(d); 返回15回main
再输出 还是15
结果 6 15 15
C