本文目錄一覽:
C語言中全局變數的優缺點?
以下純屬自己在這兩年來學習c語言、JAVA的觀點:
全局變數對於編程來說使用起來最方便,隨時可以調用它的值,且改變它的值,使用起來方便快捷;
但是也有它的缺點:自這個程序開始運行起,這個全局變數的空間就被申請,直到整個程序運算結束時,空間才會被釋放,若是局部變數(以c語言為例)在一個函數中的變數,在進入這個函數時,該函數中的變數空間被申請,結束函數時,這些變數的空間被釋放,有利於提高內存空間的利用率;
當全局變數是二維數組或多維數組時,申請為全局變數就不能及時釋放空間,佔用較大:如迷宮問題 用一個二維乃至多維數組存儲迷宮信息,申請全局變數時佔用的空間較大(但是用起來是真的方便,/笑); (我這兒並不是叫你迷宮問題不要申請全局變數的二維數組哈)
一般將在一個程序中經常會用到的變數或數據存儲為全局變數,使用一次或幾次就丟的數據一般在具體函數中定義。
觀點不一定正確,但希望有用。
C語言全局變數的優缺點
當然有道理,因為全局也不是萬能的。
全局變數優點:
1.全局可視,任何一個函數都可以訪問和更改變數值。
2.內存地址固定,讀寫效率高
缺點:
1.容易造成命名衝突
2.當值不正確或者出錯時,很難確定是哪個函數更改過這個變數
3.不支持多線程
C語言編程時使用全局變數和使用指針各有什麼特點?
全局變數就是在整個不用定義了,方便下面的編寫程序,指針就是方便數組裡面的數據在後面能很好的使用
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語言是一個有結構化程序設計、具有變數作用域以及遞歸功能的過程式語言。
C語言傳遞參數均是以值傳遞,另外也可以傳遞指針。
不同的變數類型可以用結構體組合在一起。
只有32個保留字,使變數、函數命名有更多彈性。
部份的變數類型可以轉換,例如整型和字元型變數。
通過指針,C語言可以容易的對存儲器進行低級控制。
預編譯處理讓C語言的編譯更具有彈性。
擴展資料:
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
參考資料:C語言-百度百科
原創文章,作者:ZCWDL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324566.html