c語言變量的作用域及存儲類型,c語言變量的存儲類型的定義及其使用

本文目錄一覽:

C語言之變量作用域

全局變量:作用域整個工程,在使用的地方通過extern聲明即可,存放於全局數據區,佔用靜態存儲單元。

局部變量:作用於函數方法體內,函數執行結束就釋放,存放於棧區。

全局靜態變量:作用於當前類,在外部類不可使用,除非使用#include引入頭文件,存放於全局數據區。

局部靜態變量:作用於函數方法體內,函數執行結束不釋放,存放於全局數據區。

全局靜態存儲區:分為 DATA 段和 BSS 段。DATA 段(全局初始化區)存放初始化的全局變量和靜態變量;BSS 段(全局未初始化區)存放未初始化的全局變量和靜態變量。程序運行結束時自動釋放。其中BBS段在程序執行之前會被系統自動清0,所以未初始化的全局變量和靜態變量在程序執行之前已經為0。存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。

靜態存儲變量的優勢:

優勢: 可以節省內存,因為它是所有對象所公有的,因此,對多個對象來說,靜態數據成員只存儲一處,供所有對象共用。靜態數據成員的值對每個對象都是一樣,但它的值是可以更新的。只要對靜態數據成員的值更新一次,保證所有對象存取更新後的相同的值,這樣可以提高時間效率。

關於static

(1)在修飾變量的時候,static 修飾的靜態局部變量只執行初始化一次,而且延長了局部變量的生命周期,直到程序運行結束以後才釋放。

(2)static 修飾全局變量的時候,這個全局變量只能在本文件中訪問,不能在其它文件中訪問,即便是 extern 外部聲明也不可以。

(3)static 修飾一個函數,則這個函數的只能在本文件中調用,不能被其他文件調用。static 修飾的變量存放在全局數據區的靜態變量區,包括全局靜態變量和局部靜態變量,都在全局數據區分配內存。初始化的時候自動初始化為 0。

(4)不想被釋放的時候,可以使用static修飾。比如修飾函數中存放在棧空間的數組。如果不想讓這個數組在函數調用結束釋放可以使用 static 修飾。

(5)考慮到數據安全性(當程序想要使用全局變量的時候應該先考慮使用 static)。

C語言中什麼是局部變量,局部變量存在的各種形式及作用域

局部變量即內部變量,指在函數內部定義(也可認為在塊內定義)的變量,其作用域僅為函數內部或塊內。局部變量可以以auto(自動型)、(static)靜態型、(register)寄存器型存儲類型存在。

在C語言中,全局變量的存儲類別是?

全局變量的存儲類別是靜態存儲區。

變量分為局部與全局,局部變量又可稱之為內部變量。由某對象或某個函數所創建的變量通常都是局部變量,只能被內部引用,而無法被其它對象或函數引用。

全局變量既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變量是可以被本程序所有對象或函數引用。

由下圖可以看出a、b、x、y 都是在函數外部定義的外部變量,都是全局變量。但x,y 定義在函數f1之後,而在f1內又無對x,y的說明,所以它們在f1內無效。 a,b定義在源程序最前面,因此在f1,f2及main內不加說明也可使用。

全局變量是使用相同的內存塊在整個類中存儲一個值全局變量extern與static,extern在其他源程序中也可以使用;static只能在本程序中使用。

擴展資料:

數據區可以分為靜態數據區(全局數據區)和動態數據區,後者又可分為堆區和棧區。之所以這樣劃分,是因為它們存放的數據和對應的管理方法不同。

靜態數據區、棧區和堆區的存儲空間分別遵循3種不同的規則:靜態存儲分配、棧式存儲分配和堆式存儲分配。後兩種分配方式皆稱為“動態存儲分配”,因為這兩種方式中存儲空間並不是在編譯的時候靜態分配好的,而是在運行時才進行的。 

某些編程語言,如早期的FORTRAN語言及COBOL語言等,其存儲分配是完全靜態的,程序的數據對象與其存儲的綁定是在編譯期間進行的,稱為靜態語言。

而對於另一些語言,所有數據對象與其存儲的綁定只能發生在運行期間,此類語言稱為動態語言,如Lisp、ML、Perl等。多數語言(如C/C++、Java、Pascal等)採取的存儲分配策略是介於二者之間的。

參考資料來源:百度百科-全局變量

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;是錯的,因為無法對寄存器的定址。

c語言的內存變量

 存儲類別指的是數據在內存中存儲的方法。存儲方法分為靜態存儲和動態存儲兩大類。標準C語言為變量、常量和函數定義了4種存儲類型:extern、auto、static、register。根據變量的存儲類別,可以知道變量的作用域和存儲期。這4種存儲類型可分為兩種生存期限:永久的(在整個程序執行期都存在)和臨時的(暫時保存在堆棧和寄存器中)。extern和static用來標識永久生存期限的“變量和函數”,而anto和register用來標識臨時生存期限的”變量”。只有變量才有臨時生存期限。一個變量和函數只能具有一個存儲類型,也只能有一種生存期限。

內存中供用戶使用的空間有三部分:

程序區:存放程序的可執行代碼;

靜態存儲區:存放靜態變量(全局變量和靜態局部變量);

動態存儲區:存放函數調用時調用函數的現場保護和返回地址、函數形參、自動局部變量;

變量的聲明分為”定義性聲明“(需建立存儲空間,如:int a;)和”引用性聲明“(不需建立存儲空間,如extern a;)。廣義上講,聲明包括定義,一般為敘述方便,把建立存儲空間的聲明稱定義,而不不需建立存儲空間的聲明稱聲明。

auto

函數中的局部變量,如果不用關鍵字static加以聲明,編譯系統對它們是動態地分配存儲空間的。函數的形參和在函數中定義的變量(包括在複合語句中定義的變量)都屬此類。在調用該函數時,系統給形參和函數中定義的變量分配存儲空間,數據存儲在動態存儲區中。在函數調用結束時就自動釋放這些空間。如果是在複合語句中定義的變量,則在變量定義時分配存儲空間,在複合語句結束時自動釋放空間。因此這類局部變量稱為自動變量(auto variable)。自動變量用關鍵字auto作存儲類別的聲明。

對自動變量賦初值,不是在編譯時進行的,而是在函數調用時進行。對自動變量來說,若不賦初值,則它的值是一個不確定的值。

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

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

我想你說的應該是數據類型吧

沒記錯的話應該有以下幾種:

靜態變量:變量的生存期是從程序開始到結束;

動態變量:在程序運行當中需要調用該變量時才為它分配內存;

寄存器變量:存在於寄存器中:用於需要高速存取數據的場合

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++局部變量的存儲方式有哪幾種

靜態存儲方式與動態存儲方式(具體:自動的、靜態的、寄存器的register、外部的extern)

在內存中的用戶的存儲空間分為:程序區、靜態存儲區、動態存儲區。

靜態存儲方式:在程序運行期間,系統對變量分配的固定空間。

動態存儲方式:在程序運行期間,系統對變量分配的動態空間

1用static來聲明靜態局部變量,局部變量的值在函數結束後不消失而保留原值,即其佔用的存儲單元不釋放,在下一次該函數調用時,該變量保留上次函數調用結束時的值。靜態局部變量的默認值為0.

2動態的局部變量當函數體被調用完畢時,變量的空間被釋放。

c語言定義變量時,若無變量存儲類型說明,則變量的存儲類型是

c

變量存儲類別分為哪幾種

C語言中的變量有四種存儲類型,這四種存儲類型的關鍵字分別是

auto(自動)

extern(外部)

static(靜態)

register(寄存器)

本地存儲方式有哪幾種

數據庫,nsuserdefauts, file , plist,archieve 歸檔

比較小的就放在nsuserdefaults(以文件設計的存放在Libraray中)

數據庫裡面適合存放一條一條的記錄

file 一般存普通文件,圖片,視頻,音頻等

plist 存放比 nsuserdefaults 大一些的

歸檔 nsarchieve 可以存對象

當變量的存儲類型定義缺省時,系統默認為變量的存儲類型為? c語言

當變量的存儲類型定義缺省時,系統默認為變量的存儲類型為auto類型,分配在靜態區.

c語言基本變量有哪些存儲類型?

老譚的書上有:

實型數據一般佔4個字節(32位)內存空間。按指數形式存儲。

實數3.14159在內存中的存放形式如下:

+ .314159 1

數符 小數部分 指數

其中:

小數部分佔的位(bit)數愈多,數的有效數字愈多,精度愈高。

指數部分佔的位數愈多,則能表示的數值範圍愈大。

基礎加強喲。

在C++語言中,局部變量的隱含存儲類型是() auto 無存儲類型 答案為什麼是無存類型

一個C變量有以下兩種存儲時期之一:靜態存儲時期(static storage duration)和自動存儲時期(automatic storage duration)。

具有代碼塊作用域的變量一般情況下具有自動存儲時期。在程序進入定義這些變量的代碼塊時,將為這些變量分配內存;當退出這個代碼塊時,分配的內存將被釋放。該思想把自動變量使用的內存視為一個可以重複使用的工作區或者暫存內存。

局部變量都屬於自動類型,即一旦程序棧彈出,局部變量消失。

什麼是變量的存儲類型

量有4種存儲類型,分別是auto(自動型)、static(靜態型)、register(寄存器型)和extern(外部型)。在定義或說明一個變量時可以加上存儲類型關鍵字,以限定其存儲類別。

存儲類型決定了系統將在哪一個數據存儲區為變量分配存儲空間。

變量來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變量可以通過變量名訪問。在指令式語言中,變量通常是可變的;但在純函數式語言(如Haskell)中,變量可能是不可變(immutable)的。在一些語言中,變量可能被明確為是能表示可變狀態、具有存儲空間的抽象(如在Java和Visual Basic中)。

由於變量讓你能夠把程序中準備使用的每一段數據都賦給一個簡短、易於記憶的名字,因此它們十分有用。變量可以保存程序運行時用戶輸入的數據(如使用InputBox函數在屏幕上顯示一個對話框,然後把用戶鍵入的文本保存到變量中)、特定運算的結果以及要在窗體上顯示的一段數據等。

如果在定義一個內部變量時,在定義語句最前面加上static存儲類型限定詞,那麼該變量將是一個靜態型變量。該變量將在靜態數據區分配存儲空間。這種變量作用域雖然只在函數內部,但是該變量將一直在靜態數據區佔據存儲空間,直到程序運行結束。

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

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

相關推薦

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

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

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 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定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

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

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

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

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

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

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變量、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29

發表回復

登錄後才能評論