久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 學習資源 > 講師博文 > static修飾的函數和普通函數有什么區別

static修飾的函數和普通函數有什么區別 時間:2024-05-11      來源:華清遠見

 在編程語言中,有很多地方會用到static修飾的函數,那么static修飾的函數和普通函數有哪些區別呢,這里就一下幾個方對其進行分析:

作用域:

 Static 修飾的函數:僅限定在本源碼文件中,不能被本源碼文件以外的代碼文件調用。因為此特性所以不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名,因為同名也沒有關系

 普通函數:普通的函數,默認是extern的,也就是說,可以被其它代碼文件調用該函數,在調用前需要引用頭文件或者在使用的文件中進行extern外部聲明

生命周期:

 Static 修飾的函數:生命周期和程序整個運行時間相同,直到退出應用程序,這樣避免了調用函數時壓棧出棧,速度會快很多

普通函數:生命周期僅限于該函數被調用的時段

編譯方式

Static 修飾的函數:在編譯時會被編譯器標記為本地函數

普通函數:在編譯時不會被標記

內存分配:

 Static 修飾的函數:static函數在內存中只有一份,分配內存空間僅一次,且在程序運行期間一直存在,調用時并不會重新分配內存空間。

普通函數:普通函數調用時從堆棧中動態分配內存空間,函數運行結束后返回時空間被釋放

以下是一段簡單的程序,用于演示靜態函數和非靜態函數的區別:

#include <stdio.h> 

 void non_static_func() { 

    int num = 0; 

     printf("non_static_func num: %d\n", num); 

    num++; 

 static void static_func() { 

    static int num = 0; 

     printf("static_func num: %d\n", num); 

    num++; 

 int main() { 

    int i; 

     for (i = 0; i < 3; i++) { 

         non_static_func(); 

         static_func(); 

    } 

    return 0; 

通過運行程序,我們可以看到以下結果:

non_static_func num: 0 

static_func num: 0 

non_static_func num: 0 

static_func num: 1 

non_static_func num: 0 

static_func num: 2 

  我們可以看出,non_static_func函數每次被調用時,變量num的值始終為0,并沒有被保留下來。而static_func函數每次被調用時,變量num的值可以被保留下來,并在下次調用時繼續使用。這是因為static_func函數中的變量num是靜態變量,其生命周期保持到程序結束,而non_static_func函數中的變量num是一個普通的自動變量,其生命周期僅限于函數調用過程中。

 因此,我們可以看出,靜態函數中的靜態變量可以在多次函數調用之間保持變量值不變,而非靜態函數中的變量則不會保留之前的值。這是靜態函數與非靜態函數的一個主要區別。

 

上一篇:機器學習的基本概念、五大流派與九種算法

下一篇:static全局變量和普通全局變量的區別

戳我查看嵌入式每月就業風云榜

點我了解華清遠見高校學霸學習秘籍

猜你關心企業是如何評價華清學員的

干貨分享
相關新聞
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部