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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言-变量生存期及作用域

發布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言-变量生存期及作用域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1 變量的生存期和作用域
  • 2 默認初始化規則(C++11)

1 變量的生存期和作用域

  • 變量的儲存方式:動態儲存(自動、寄存器)、靜態儲存(靜態和外部)
儲存方式名稱
自動變量anto
寄存器變量register
靜態儲存static
外部變量extern
  • 基本類型的靜態變量(static)系統初始值為 0,全局變量也會自動初始化0
  • extern聲明外部變量時,類型名可以寫也可以不寫,如extern int A,B,C,也可以寫成extern A,B,C,因為它不是定義變量,可以不指定類型,只需寫出外部變量名即可。
  • 若希望某些外部變量只限于本文件引用,而不能被其他文件引用,可以在定義外部變量時加一個static聲明,如static int A;,那么在其他文件引用extern A就會報錯。
  • 對局部變量聲明static,作用是把它分配在靜態內存,它在整個程序執行過程中不會被釋放。對全局變量聲明static,則限定該變量作用域只限于本文件。
  • 若要求函數只能被本文件內調用,稱為內部函數,在定義內部函數時,加上static即可。
  • 若要定義外部函數,加上extern即可,但C語言默認不加static的就會外部函數,可以被其他文件調用。
  • Stack (棧內存):主要是用來存儲 function calls(函數調用)和 local variables(局部變量) 的空間,其本質就是一個 Stack(棧)。最底層的便是 main() 函數,每調用一個函數時就會執行 push 操作,每當函數 return 時便執行 pop 操作。什么時候 main() 也被 pop 了,整個程序也就結束了。(如果這個 stack 變得太高以至于超出了最大內存地址,就會出現所謂的 stackoverflow

  • HEAP(堆內存):主要是用來存儲由 malloc() 等申請的內存位置。如果 malloc() 返回 null 的話就往往表示這一塊空間已經用完了。

  • Static (靜態內存):這里的變量的生命周期與整個程序相同,即在進程創建是被申明,在程序退出時被銷毀。global variables(全局作用域變量), file scope variables(文件作用域變量)和被 static 關鍵字修飾的變量會存在這里。

2 默認初始化規則(C++11)

  • 棧中的變量(函數體中的自動變量)和堆中的變量(動態內存)會保有不確定的值;
  • 全局變量(靜態內存)和靜態變量(包括局部靜態變量,靜態內存)會初始化為零。

C++11: If no initializer is specified for an object, the object is default-initialized; if no initialization is performed, an object with automatic or dynamic storage duration has indeterminate value. Note: Objects with static or thread storage duration are zero-initialized, see 3.6.2.

總結

以上是生活随笔為你收集整理的C语言-变量生存期及作用域的全部內容,希望文章能夠幫你解決所遇到的問題。

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