本文位址: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.
轉載于:https://www.cnblogs.com/muyuge/p/6152529.html