天天看點

[C++學習曆程]基礎部分 C++中的函數學習

本文位址: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;
}
           
[C++學習曆程]基礎部分 C++中的函數學習

通過運作結果可以看出,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;
}
           

先看這個例子,結果如下:

[C++學習曆程]基礎部分 C++中的函數學習

通過這例子可以看出,經過函數調用,初始化的時候同樣是3 ,第一個參數是形式參數,傳入之後對其進行操作,隻在函數内部發生作用,函數外部,值不會發生變化,對于第二個參數,是傳位址的,就是我修改了之後呢,記憶體中這個值也就發生了變化,再擷取的時候就是函數内部操作之後的數值了。

是以輸出的是a = 3,b=4.

轉載于:https://www.cnblogs.com/muyuge/p/6152529.html