日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

static in c language

發布時間:2023/11/30 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 static in c language 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里的重點不是靜態(全局/局部)變量、靜態函數,我們從其他角度說一說static.

static關鍵字,針對的是變量和函數,而不是結構。因此,不能對struct、union等結構賦予static屬性,我們來分析一下。

static variable

以下是C程序的內存布局

Memory Layout of C Programs

  • 對于一個變量,我們將其放在全局,就是全局變量;將其放在代碼塊里面,就是局部變量。他們會被分配到存儲空間中
    • 初始化的全局變量,存在initialized data段
    • 未初始化的全局變量,存在bss段
    • 局部變量,存在stack段
    • 動態申請的變量,存在heap段
  • #include <stdio.h>int t; // 未初始化的全局變量 int a = 0; // 初始化的全局變量void func(){int local; // 局部變量int *dynamic = (int *)malloc(sizeof(int) * 10); // 動態申請的變量 }int main(){return 0; }
  • 如果在全局/局部變量前,加上static就成了靜態全局變量、靜態局部變量
    • 靜態局部/全局變量,初始化的放在data段,未初始化的放在bss段,且初始化為0.
    • 靜態全局變量,只能在當前C文件使用
    • 靜態局部變量,只能在它所在的代碼塊內使用
  • #include <stdio.h>static int t; // 未初始化的靜態全局變量 static int a = 9; // 初始化的靜態全局變量void func(){static int local = 10; // 靜態局部變量,不會被執行!編譯完就存在了,只不過作用范圍是當前函數 }int main(){return 0; }

    需要注意的是,靜態局部變量在函數被調用的時候,變量對應的語句不會被執行。

    因此來說,static可以對變量使用!它使得變量的范圍縮小、內容持久且默認初始化為0

    static function

    這個沒什么好說的,使用了static attribute的function,作用范圍是當前C文件,其他C文件不可用,就類似于私有。

    static 不可用于struct enum等結構

    我們需要明白,static作用的對象,必須是存在的

    • 對于struct,如果只是定義結構,而沒有定義變量,那么不能使用static,因為它只代表的是自定義數據類型,編譯完就消失了,static是沒有意義的。
    static struct mys{int a;int b; };

    上述代碼會報錯的!

    static struct mys{int a;int b; } test;

    上述代碼就沒錯,因為你定義了變量,并且,你其實還可以給這個變量賦值。

    static struct mys{int a;int b; } test = {100, 30};

    union也是同理!

    • 其實enum也是一樣的道理,它可能跟struct內部定義不太一樣,但是從外部看,是一樣的!使用static的方式也一樣。

    總結

    以上是生活随笔為你收集整理的static in c language的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。