tft每日頭條

 > 圖文

 > static關鍵字的用途

static關鍵字的用途

圖文 更新时间:2024-07-31 20:13:18

static關鍵字的用途?在文章開頭先寫總結吧,省的文章太長大家看的又暈簡單總結下來static關鍵字具有以下兩點作用:改變變量的生命周期和限定作用域,下面我們就來聊聊關于static關鍵字的用途?接下來我們就一起去了解一下吧!

static關鍵字的用途(static關鍵字到底有什麼作用)1

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每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved