簡述c語言變數的存儲有哪幾類特性,c語言變數的存儲特性分幾類

本文目錄一覽:

C語言中變數的存儲類型有哪幾種,存儲方式哪幾種?謝嘍

C語言中的變數有四種存儲類型,這四種存儲類型的關鍵字分別是auto(自動),extern(外部),static(靜態)和register(寄存器)。

C語言中變數存儲類型有哪些

turbo

c2.0支持四種變數存儲類型。說明符如下:

auto

static

extern

register

下面分別來介紹。

一、auto

auto稱為自動變數。

局部變數是指在函數內部說明的變數(有時也稱為自動變數)。用關鍵字auto進

行說明,

當auto省略時,

所有的非全程變數都被認為是局部變數,

所以auto實際上

從來不用。

局部變數在函數調用時自動產生,

但不會自動初始化,

隨函數調用的結束,

個變數也就自動消失了,

下次調用此函數時再自動產生,

還要再賦值,

退出時又自

動消失。

二、static

static稱為靜態變數。根據變數的類型可以分為靜態局部變數和靜態全程變數。

1.

靜態局部變數

它與局部變數的區別在於:

在函數退出時,

這個變數始終存在,

但不能被其它

函數使用,

當再次進入該函數時,

將保存上次的結果。其它與局部變數一樣。

2.

靜態全程變數

turbo

c2.0允許將大型程序分成若干獨立模塊文件分別編譯,

然後將所有模塊

的目標文件連接在一起,

從而提高編譯速度,

同時也便於軟體的管理和維護。靜態

全程變數就是指只在定義它的源文件中可見而在其它源文件中不可見的變數。它與

全程變數的區別是:

全程變數可以再說明為外部變數(extern),

被其它源文件使用,

而靜態全程變數卻不能再被說明為外部的,

即只能被所在的源文件使用。

三、extern

extern稱為外部變數。為了使變數除了在定義它的源文件中可以使用外,

還要

被其它文件使用。因此,

必須將全程變數通知每一個程序模塊文件,

此時可用

extern來說明。

四、register

register稱為寄存器變數。它只能用於整型和字元型變數。定義符register說

明的變數被turbo

c2.0存儲在cpu的寄存器中,

而不是象普通的變數那樣存儲在內

存中,

這樣可以提高運算速度。但是turbo

c2.0隻允許同時定義兩個寄存器變數,

一旦超過兩個,

編譯程序會自動地將超過限制數目的寄存器變數當作非寄存器變數

來處理。因此,

寄存器變數常用在同一變數名頻繁出現的地方。

另外,

寄存器變數只適用於局部變數和函數的形式參數,

它屬於auto型變數,

因此,

不能用作全程變數。定義一個整型寄存器變數可寫成:

register

int

a;

對於以上所介紹的變數類型和變數存儲類型將會在以後的學習中,

通過例行程

序中的定義、使用來逐漸加深理解。

c語言變數的儲存類別及各自的特點

你自己根據需要歸納吧~

C語言變數存儲類型

auto

static

extern

static extern

register

auto 局部變數

auto 變數是用堆棧(stack)方式佔用儲存器空間,因此,當執行此區段是,系統會立即為這個變數分配存儲器空間,而程序執行完後,這個堆棧立即被系統收回.在大括弧{}內聲明.

自動變數就是指在函數內部定義使用的變數。他只是允許在定義他的函數內部使用它。在函數外的其他任何地方都不能使用的變數。自動變數是局部變數,即它的區域性是在定義他的函數內部有效。當然這說明自動變數也沒有鏈接性,因為它也不允許其他的文件訪問他。由於自動變數在定義他的函數的外面的任何地方都是不可見的,所以允許我們在這個函數外的其他地方或者是其他的函數內部定義同名的變數,他們之間不會發生衝突的。因為他們都有自己的區域性,而且它沒有鏈接性(即:不允許其他的文件訪問他的)。來看看自動量的持續性。計算機在執行這個函數的時候,創建並為它分配內存,當函數執行完畢返回後,自動變數就會被銷毀。這個過程是通過一個堆棧的機制來實現的。為自動變數分配內存就壓棧,而函數返回時就退棧。

static 靜態變數

一、局部靜態變數

局部變數按照存儲形式可分為三種auto, static, register。

與auto類型(普通)局部變數相比, static局部變數有三點不同:

1. 存儲空間分配不同

auto類型分配在棧上, 屬於動態存儲類別, 占動態存儲區空間, 函數調用結束後自動釋放, 而static分配在靜態存儲區, 在程序整個運行期間都不釋放. 兩者之間的作用域相同, 但生存期不同.

2. static局部變數在所處模塊在初次運行時進行初始化工作, 且只操作一次。

3. 對於局部靜態變數, 如果不賦初值, 編譯期會自動賦初值0或空字元, 而auto類型的初值是不確定的.

特點: static局部變數的」記憶性」與生存期的」全局性」

所謂」記憶性」是指在兩次函數調用時, 在第二次調用進入時, 能保持第一次調用退出時的值.

注意事項:

1. 「記憶性」, 程序運行很重要的一點就是可重複性, 而static變數的」記憶性」破壞了這種可重複性, 造成不同時刻至運行的結果可能不同.

2. 「生存期」全局性和唯一性. 普通的local變數的存儲空間分配在stack上, 因此每次調用函數時, 分配的空間都可能不一樣, 而static具有全局唯一性的特點, 每次調用時, 都指向同一塊內存, 這就造成一個很重要的問題 —- 不可重入性!!!

二、外部靜態變數/函數

在C中static有了第二種含義:用來表示不能被其它文件訪問的全局變數和函數。, 但為了限制全局變數/函數的作用域, 函數或變數前加static使得函數成為靜態函數。但此處「static」的含義不是指存儲方式,而是指對函數的作用域僅局限於本文件(所以又稱內部函數)。注意此時, 對於外部(全局)變數, 不論是否有static限制, 它的存儲區域都是在靜態存儲區, 生存期都是全局的. 此時的static只是起作用域限制作用, 限定作用域在本模塊(文件)內部.

使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名。

extern 變數

外部變數 定義在程序外部,所有的函數很程序段都可以使用.

外部變數可能會在某一程序段被重新定義,以段內變數為參考值.

static extern 變數

靜態外部變數和外部變數差別在於,外部變數生命可以同時給多個文件使用,而靜態外部變數則只能給聲明此變數的文件使用.

register 變數

寄存器變數,是由寄存器分配空間,訪問速度比訪問內存快,加快執行速度.寄存器大小有限.

在c語言當中可以使用寄存器變數來優化程序的性能,最常見的是在一個函數體當中,將一個常用的變數聲明為寄存器變數: register int ra; 如果可能的話,編譯器就會為它分配一個單獨的寄存器,在整個函數執行期間對這個變數的操作全都是對這個寄存器進行操作,這時候就不用頻繁地去訪存了,自然就提高了性能。

不能用於全局變數。現在的情況是VC忽略用戶定義的REGISTER,因此定義一個REGISTER變數與不定義一個REGISTER是一樣的,編譯器進行相同的優化,因為MS認為,REGISTER是系統中寶貴的資源,應該由系統統一調配,而且認為VC編譯器的優化能力要大於一般的程序員。因此也有人說register關鍵字在PC機(x86CPU)無用,編譯器按自動變數處理。

注意: register是不能取址的。

register int j; int *p = j;是錯的,因為無法對寄存器的定址。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289590.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:03
下一篇 2024-12-24 03:03

相關推薦

  • int類型變數的細節與注意事項

    本文將從 int 類型變數的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變數進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變數。 一、定義與聲明 int…

    編程 2025-04-29
  • Python計算機語言的特性與應用

    Python,是一種高層次、解釋型的、面向對象的計算機編程語言。 一、簡介 Python編程語言的初衷是:代碼簡潔易讀、可拓展性強、適用範圍廣。其應用領域包括Web開發、數據科學、…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python input參數變數用法介紹

    本文將從多個方面對Python input括弧里參數變數進行闡述與詳解,並提供相應的代碼示例。 一、基本介紹 Python input()函數用於獲取用戶輸入。當程序運行到inpu…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python匿名變數的使用方法

    Python中的匿名變數是指使用「_」來代替變數名的特殊變數。這篇文章將從多個方面介紹匿名變數的使用方法。 一、作為佔位符 匿名變數通常用作佔位符,用於代替一個不需要使用的變數。例…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python變數在內存中的存儲

    該文章將從多個方面對Python變數在內存中的存儲進行詳細闡述,包括變數的聲明和賦值、變數的引用和指向、內存地址的變化、內存管理機制等。 一、聲明和賦值 在Python中,變數聲明…

    編程 2025-04-29

發表回復

登錄後才能評論