重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include iostream
专业从事做网站、成都网站建设,高端网站制作设计,成都微信小程序,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用HTML5建站+CSS3前端渲染技术,成都响应式网站建设,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。
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;
}
局部变量是指在程序中,只在特定过程或函数中可以访问的变量,是相对于全局变量而言的。
在C语言中,局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。
#include
int fun(int a)
{
int temp; // 变量temp就是定义的一个局部变量,在fun函数执行完后,其在内存中占用的内存区就会释放回收
temp = 2*a;
return temp;
}
int b; // 变量b就是一个全局变量,当程序执行完后,才释放其占用的内存
void main()
{
int a=2; // 变量a也是局部变量
b = fun();
}
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。
您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。
C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。
函数还有很多叫法,比如方法、子例程或程序,等等。
C 语言中的函数定义的一般形式如下:
在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:
以下是 max() 函数的源代码。该函数有两个参数 num1 和 num2,会返回这两个数中较大的那个数:
创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。
当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。
调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:
如上把 max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:
形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。
当调用函数时,有两种向函数传递参数的方式:
默认情况下,C 使用 传值调用 来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。
根据使用范围来区分的。
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);
}
我还要说明的是 对外部变量的说明和对全局变量的定义不是一回事
对外部变量的说明 只是声明该变量是在外部定义过的一个全局变量 在这里引用 而对全局变量的定义则是要对起分配存储单元的
一个全局变量只能定义一次 可是却可以多次引用
*** 在同一源文件中,全局变量和局部变量同名时,在局部变量的作用域内,全局变量不起作用的。