吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言變量的存儲類別有哪些詳細資料介紹

Wildesbeast ? 來源:今日頭條 ? 作者:算法集市 ? 2020-02-20 16:17 ? 次閱讀

C語言中的變量根據其生存周期,可以分為靜態存儲方式和動態存儲方式。

靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。

動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的,通常包括:自動變量;函數形參;函數調用時的現場保護和返回地址等。

靜態分配和動態分配的區別主要是兩個:

時間不同:靜態分配發生在程序編譯和連接的時候,動態分配則發生在程序調入和執行的時候。

空間不同:堆都是動態分配的,沒有靜態分配的堆。動態分配由函數malloc進行分配(需要注意的是有一個malloc,就有一個free對應)。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。不過棧的動態分配和堆不同,它的動態分配是由編譯器進行釋放,無需人工實現。

C語言的內存分配方式:堆和棧

變量示例

C語言中的變量具體包含有四種:自動的(auto),靜態的(static),寄存器的(register),外部的(extern),如果不加以聲明,則認為是auto型,自動分配存儲空間,屬于動態存儲方式。

Static聲明局部變量是在函數調用結束后不消失而保留原值,即占用存儲單元不釋放,在下一次調用該函數時,該變量保持上次函數調用結束時的值。Static在對全局變量聲明中,該變量的作用域則僅限于本文件模塊操作。

Register變量是C語言中允許將局部變量的值放在CPU中的寄存器中需要時直接從寄存器中取出來參加運算,不必再到內存中提取,但是計算機系統中寄存器數量有限,不能任意定義任意多的存儲器,局部靜態變量不能定義為寄存器變量。

寄存器是最貼近CPU的,而且CPU只在寄存器中進行存取。寄存的意思是暫時存放數據,不用每次都從內存中取,它是一個臨時的存放數據的空間。

關于寄存器變量有以下事項需要注意:

為寄存器變量分配寄存器是動態完成的,因此,只有局部變量和形式參數才能定義為寄存器變量。

寄存器的長度一般和機器的字長一致,所以,只有較短的類型如int、char、short等才適合定義為寄存器變量,諸如double等較大的類型,不推薦將其定義為寄存器類型。

CPU的寄存器數目有限,因此,即使定義了寄存器變量,編譯器可能并不真正為其分配寄存器,而是將其當做普通的auto變量來對待,為其分配棧內存。當然,有些優秀的編譯器,能自動識別使用頻繁的變量,如循環控制變量等,在有可用的寄存器時,即使沒有使用 register 關鍵字,也自動為其分配寄存器,無須由程序員來指定。

計算機系統的硬件組織:總線、IO、主存、CPU

Extern聲明外部變量,表示變量在別的文件中。在一個文件中,如果定義之前的函數想引用該外部變量,則應該在引用之前用關鍵字extern對該變量做外部變量聲明。在多文件中,也可以采用extern聲明的辦法進行外部變量聲明。有時希望某些局部變量只限于被本文件引用,而不能被其他文件引用,這時就可以采用在定義外部變量時外加一個static,這在程序模塊化設計中加強了通用性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137703
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62968
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28463
收藏 人收藏

    評論

    相關推薦

    c語言變量的作用域和存儲類別

    c語言變量的作用域和存儲類別簡述,很不錯哦。
    發表于 07-14 17:12 ?0次下載

    C語言函數手冊詳細資料大全(免費下載)

    C語言函數手冊詳細資料大全(免費下載) 包括了各種C語言函數的:功能,用法,程序例
    發表于 06-04 08:07 ?82次下載

    C++語言入門教程之C++語言程序設計函數的詳細資料概述免費下載

    本文檔的主要內容詳細介紹的是C++語言入門教程之C++語言程序設計函數的
    發表于 09-20 14:51 ?23次下載

    C語言入門教程之字符數據的詳細資料講解

    本文檔的主要內容詳細介紹的是C語言入門教程之字符數據的詳細資料講解主要內容包括了:1 字符型常量2 字符
    發表于 10-23 17:53 ?7次下載

    C語言入門教程之堆棧的詳細資料概述

    本文檔的主要內容詳細介紹的是C語言入門教程之堆棧的詳細資料概述。
    發表于 11-29 11:47 ?12次下載

    C語言程序設計教程之C語言基礎的詳細資料概述

    本文檔的主要內容詳細介紹的是C語言程序設計教程之C語言基礎的
    發表于 12-10 17:16 ?66次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設計教程之<b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎的<b class='flag-5'>詳細資料</b>概述

    C語言教程之Makefile基礎的詳細資料說明

    本文檔的主要內容詳細介紹的是C語言教程之Makefile基礎的詳細資料說明。
    發表于 01-23 11:05 ?12次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之Makefile基礎的<b class='flag-5'>詳細資料</b>說明

    C語言標準教程之C語言基礎知識的詳細資料說明

    本文檔的詳細介紹的是C語言標準教程之C語言基礎知識的詳細資料
    發表于 02-15 11:26 ?6次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>標準教程之<b class='flag-5'>C</b><b class='flag-5'>語言</b>基礎知識的<b class='flag-5'>詳細資料</b>說明

    C語言教程之指針的詳細資料說明

    本文檔的主要內容詳細介紹的是C語言教程之指針的詳細資料說明 學習目標1.指針與指針變量2.指針的
    發表于 02-21 11:11 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之指針的<b class='flag-5'>詳細資料</b>說明

    C語言實用教程之函數的詳細資料說明

    本文檔詳細介紹的是C語言實用教程之函數的詳細資料說明主要內容包括了:1程序設計的藝術性,2函數的定義與使用,3函數的作用域和
    發表于 02-26 14:43 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>實用教程之函數的<b class='flag-5'>詳細資料</b>說明

    C語言程序設計教程課件之函數的詳細資料說明

    本文檔詳細介紹的是C語言程序設計教程課件之函數的詳細資料說明主要內容包括了:1.概述,2.函數的定義,3.函數的返回值,4.函數的調用,5.
    發表于 02-28 10:35 ?3次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設計教程課件之函數的<b class='flag-5'>詳細資料</b>說明

    PHP八種變量類型的詳細資料說明

    本文檔的主要內容詳細介紹的是PHP八種變量類型的詳細資料說明免費下載。
    發表于 03-01 17:20 ?7次下載
    PHP八種<b class='flag-5'>變量</b>類型的<b class='flag-5'>詳細資料</b>說明

    C語言教程之數據類型與運算符的詳細資料說明

    本文檔的主要內容詳細介紹的是C語言教程之數據類型與運算符的詳細資料說明主要內容包括了:數據類型,常量與
    發表于 03-01 17:20 ?8次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之數據類型與運算符的<b class='flag-5'>詳細資料</b>說明

    如何使用C語言實現軟復位詳細資料說明

    本文檔的有內容詳細介紹的是如何使用C語言實現軟復位詳細資料說明。
    發表于 06-14 17:44 ?1次下載
    如何使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>實現軟復位<b class='flag-5'>詳細資料</b>說明

    C語言教程之函數的詳細資料說明

    本文檔的主要內容詳細介紹的是C語言教程之函數的詳細資料說明包括了:1 函數概述 ,2 函 數 定 義 ,3 函數的調用 ,4 函數參
    發表于 03-21 15:39 ?9次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之函數的<b class='flag-5'>詳細資料</b>說明
    大发888怎么注册账号| 百家乐官网赌场论坛| 百家乐一代龙虎机| 猪猪棋牌游戏| 巨星百家乐官网的玩法技巧和规则 | 百家乐官网是咋玩法| 网上百家乐如何打水| 百家乐官网好不好玩| 澳门百家乐几副牌| 百家乐官网蓝盾假网| 百家乐龙虎斗| 百家乐官网游戏规则介绍| 至尊百家乐娱乐| 金臂百家乐官网注册送彩金| 百家乐系列抢庄龙| 百家乐官网视频游戏金币| 百家乐单人操作扫描道具| 百家乐官网专业赌徒| 百家乐赌场走势图| 百家乐官网娱乐求指点呀| 至尊百家乐娱乐| 狮威百家乐官网娱乐场| 大发888娱乐场大发888娱乐场下载| 百家乐官网有多少种游戏| 贵族百家乐的玩法技巧和规则| 玩百家乐官网五湖四海娱乐城| 威尼斯人娱乐场it| 利澳百家乐官网的玩法技巧和规则| 蓝盾百家乐| 皇冠百家乐赢钱皇冠| 百家乐官网视频游戏道具| 悦榕庄百家乐的玩法技巧和规则| 菲律宾百家乐官网开户| 联众博彩| 百家乐澳门规矩| 足球.百家乐官网投注网出租| 大发888wf娱乐场下载| 百家乐另类投注法| 百家乐官网赌法博彩正网| 大发888网页多少| 民宅24方位|