static關鍵字的用途?在文章開頭先寫總結吧,省的文章太長大家看的又暈簡單總結下來static關鍵字具有以下兩點作用:改變變量的生命周期和限定作用域,下面我們就來聊聊關于static關鍵字的用途?接下來我們就一起去了解一下吧!
在文章開頭先寫總結吧,省的文章太長大家看的又暈。簡單總結下來static關鍵字具有以下兩點作用:改變變量的生命周期和限定作用域
1、改變變量的生命周期我們都知道在函數中申明的局部變量在函數調用完成後即會被釋放,但是由static申明的局部變量的生存周期是長于函數的,也就是說即使函數調用結束後該變量的内存也不會被釋放。下面我們直接看代碼:
#include <stdio.h>
#include <iostream>
void func()
{
int i = 1 ;
static int i_static = 1;
i ;
i_static ;
std::cout<<"i:"<<i<<std::endl<<"i_staic:"<<i_static<<std::endl ;
}
int main()
{
std::cout<<"first run:"<<std::endl ;
func();
std::cout<<"sencond run:"<<std::endl ;
func();
system("pause");
}
我們運行起來看結果:
first run:
i:2
i_staic:2
sencond run:
i:2
i_staic:3
這樣就很清楚了吧:i是普通局部變量的申明方式,在每次函數調用時都會重新分配内存重新初始化,在函數結束後該内存就會被自動釋放。但是static聲明的局部變量随着第一次函數的調用而初始化,卻不随着函數的調用結束而銷毀,而是一直存在直至程序結束。具體原理是什麼這個就牽涉到C 程序内存的分配原則了。有興趣的朋友可以關注小編,下一篇為大家詳細講解。
2、限定作用域用static申明的變量和函數作用域都僅限本文件。關于限定作用域必須得結合C 的另外一個關鍵字‘extern’來講解(修飾符extern用在變量或者函數的聲明前,用來說明“此變量/函數是在别處定義的,要在此處引用。關于extern關鍵字的作用,關注小編後續為大家分享)。好,廢話不多說直接上代碼(程序猿就是這樣,看代碼比看文字舒服多了,嘿嘿)
這裡有兩個 .Cpp 文件其中a.cpp中代碼如下:
#include <iostream>
int test01 = 10 ;
static int test02 = 11 ;
void func1()
{
std::cout<<"no static func"<<std::endl;
}
static void func2()
{
std::cout<<"static func"<<std::endl;
}
在這裡定義了兩個變量(一個靜态一個非靜态)和兩個函數(一個靜态一個非靜态),然後再另外一個‘源.cpp’中引用他們,我們看運行結果是什麼樣的(注意看注釋的代碼)
using namespace std ;
extern int test01 ;
//extern int test02 ;
extern void func1();
extern void func2();
int main()
{
cout<<test01<<endl;
//cout<<test02<<endl;
func1();
//func2();
system("pause");
}
按照現在的代碼運行結果是:
10
no static func"
但是當我将注釋的代碼放開然後編譯運行就會報錯:
這是因為在extern在尋找test02和func2的時候在a.cpp中被static給屏蔽掉(因為static的作用就是限定test02和func2的作用域隻是作用于本文件即a.cpp文件)
好了,現在大家應該對于static的作用已經有了很全面的認識了吧!希望我的分享能夠幫助大家,祝大家長發飄飄~~~
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!