[C++学习历程]基础部分 C++中的函数学习

本文介绍了C++中函数内的静态变量与参数传递的区别。静态变量仅在函数首次调用时初始化,后续调用不重新初始化,而局部变量每次调用都会重置。在参数传递方面,值传递的参数在函数内部修改不会影响外部值,而地址传递则会改变实际内存中的值。
摘要由CSDN通过智能技术生成

本文地址:http://blog.csdn.net/sushengmiyan/article/details/20305815

作者:sushengmiyan

一。静态变量:

局部变量是线程到达定义的地方的时候进行初始化,如果定义在函数中,那么每次函数调用的时候,都会进行初始化,函数的每个调用保留着一个副本,对于静态变量来说,只在第一次调用的时候初始化。通过下面一个例子可以细细体会这个区别:

// sushengmiyanTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void f(int a)
{
  while(a--)
  {
	  static int n = 0;
	  int x = 0;
	  cout<<"n=="<<n++<<" ,x=="<<x++<<"\n";
  }
}

int _tmain(int argc, _TCHAR* argv[])
{
	//cout<<"hello world \n";
	f(3);
	system("pause");
	return 0;
}

通过运行结果可以看出,n是静态变量,虽然每次调用函数了,但是只是一次初始化,后面执行n++之后,值就是n++的值,再次调用也不会初始化,对于x来说是局部变量,每次调用都会初始化一下,所以每次都是0.


二。参数传递

// sushengmiyanTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void f(int a)
{
  while(a--)
  {
	  static int n = 0;
	  int x = 0;
	  cout<<"n=="<<n++<<" ,x=="<<x++<<"\n";
  }
}

void fuc(int m, int& n)
{
	m++;
	n++;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int a = 3;
	int b = 3;
	//cout<<"hello world \n";
	fuc(a, b);
	cout<<"a=="<<a<<" ,b=="<<b<<"\n";
	system("pause");
	return 0;
}

先看这个例子,结果如下:

通过这例子可以看出,经过函数调用,初始化的时候同样是3 ,第一个参数是形式参数,传入之后对其进行操作,只在函数内部发生作用,函数外部,值不会发生变化,对于第二个参数,是传地址的,就是我修改了之后呢,内存中这个值也就发生了变化,再获取的时候就是函数内部操作之后的数值了。

所以输出的是a = 3,b=4.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值