1. 程式人生 > >C語言中的四種儲存型別

C語言中的四種儲存型別

   一、 首先來說說資料的型別,所有的資料都有兩種型別,一是常見的資料型別,如int,float等,一種便是今天的重頭戲,儲存型別。總共有四種儲存型別的變數,分別為自動變數(auto)、靜態變數(static)、外部變數(extern)以及暫存器變數(register)。

    先回顧一下定義

    1、自動變數:函式中所有的非靜態區域性變數。

    2、靜態變數:在變數前加上static關鍵字的變數。

    3、外部變數:一般用作全域性變數作用域的擴充套件(還有定義外部函式的時候前面也可以有一個extern關鍵字,具體外部函式請看下面)。

    4、暫存器變數:一般經常被使用的的變數(如某一變數需要計算幾千次)可以設定成暫存器變數,register變數會被儲存在暫存器中,計算速度遠快於存在記憶體中的非register變數。

    二、儲存變數關乎著變數的作用域和生存時間

    1、從作用域(空間)的角度來看:

   

    自動變數:其作用域僅僅侷限於其定義的函式中,儲存在動態儲存區,注意儲存在動態儲存區的資料,在沒有顯式初始化的時候,其變數的值是隨機的,無用的。

    靜態變數:儲存在靜態儲存區,靜態變數包括靜態全域性變數靜態區域性變數,靜態變數在沒有顯式初始化的時候會被初始化為0或者null,並且只初始化一次(初始化不等同於賦值)。

                         靜態全域性(外)變數:作用域只是在其定義的原始檔中有效,對外部變數起到了“遮蔽”的作用。

                         靜態區域性變數:其作用域是其定義的函式中。

    外部變數:把全域性變數在其他原始檔中宣告成extern變數,可以擴充套件該全域性變數的作用域至宣告的那個檔案,其本質作用就是對全域性變數作用域的擴充套件。

    暫存器變數:儲存在cpu的暫存器中,速度快,一般不需要程式設計師定義暫存器變數,這是由於一些編譯器會把需要參加很多次計算的變數轉化成暫存器變數,不允許程式設計師對暫存器變數的地址進行操作。

    2、從生存時間的角度來看:

    自動變數:隨著函式的進棧和出棧而建立和銷燬

    靜態變數:長期存在靜態儲存區,直到程式結束

    外部變數:長期存在靜態儲存區,直到程式結束

    暫存器變數:離開函式值就會消失

相關推薦

C語言儲存型別

   一、 首先來說說資料的型別,所有的資料都有兩種型別,一是常見的資料型別,如int,float等,一種便是今天的重頭戲,儲存型別。總共有四種儲存型別的變數,分別為自動變數(auto)、靜態變數(s

c語言-變數的儲存型別

auto         自動變數register     暫存器變數extern 外部變數static 靜態變數 一般形式:儲存型別說明符 資料型別說明符 變數名,變數名...static int a,b; auto char c1,c2; static int a[3

c++強制型別轉換(const_cast、static_cast應用最多)

c++動態型別轉換有四種const_cast、static_cast、dynamic_cast、reinterpreter_cast 前面兩個用的多,但是後面的針對其設計理念有許多其他的實現方法可達到同樣的效果 1. static_cast (1)用於基

C語言型別所佔位元組數

最近經常會遇到C語言中各型別變數所佔位元組數的問題,索性在這裡做一個整理總結。 其實C標準並沒有具體給出規定哪個基本型別應該是多少個位元組數,而且這個也與OS、編譯器有關,比如同樣是在32位作業系統,VC++的編譯器下int型別為4個位元組,而在tuborC下

c語言典型的排列組合算法

scan .com nbsp 方法 can main else const 組合數 c語言中的全排列算法和組合數算法在實際問題中應用非常之廣,但算法有許許多多,而我個人認為方法不必記太多,最好只記熟一種即可,一招鮮亦可吃遍天 全排列: #include<stdio.h

C語言符號的儲存類、連結屬性和生命週期

C語言中符號的儲存類 程式碼段:程式執行的程式碼,其實就是函式,它的生命週期是永久的(永久的意思就是在程式被執行時誕生,在程式終止時消亡),不過一般程式碼的生命週期我們並不關注。有時候放在程式碼段的不只是程式碼,還有const型別的常量,還有字串常量(const型別的常量、字串常量有時候放在

mysql儲存引擎的區別和選擇

前言 資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行建立、查詢、更新和刪除資料。不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定水平等功能,使用不同的儲存引擎,還可以 獲得特定的功能。現在許多不同的資料庫管理系統都支援多種不同的資料引擎。MySQL的核心就是儲存引擎。 儲存引

C語言的五儲存

五種儲存類 C Primer Plus 第十二章 儲存類、連結和記憶體管理 儲存類 時期 作用域 連結 宣告方式 自動 自動 程式碼塊 空

C || 圖的儲存結構實現

1. 陣列表示法: #include <stdio.h> #include <limits.h> #define INFINITY INT_MAX #define Maxvex 100 typedef struct graph {

c#語言如何將int型別轉化為byte型別謝謝

原始碼編譯後包含註釋內容?接發資料出現亂碼原始碼編譯後包含註釋內容?接發資料出現亂碼 做出Windows桌面的效果C#一元一次方程做出Windows桌面的效果C#一元一次方程 UnicodeEncoding將一個位元組序列解碼為一個字串,但是全是亂碼。word文件中的字串替換

C語言有關於資料型別的幾個問題

1.整型資料轉換成字元型資料時資料過大; int  ch1 = 5566; char  ch2 = (char)ch1; printf("%c \n", ch2 ); 輸出亂碼�;char型別最大範圍到127,所以ch1最大隻能到127。 2.int  ch1 =

C語言程式結構

1、順序結構 順序結構的程式設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。 例如;a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子水

java引用型別

 今天看程式碼,裡面有一個類java.lang.ref.SoftReference把小弟弄神了,試想一下,接觸java已經有3年了哇,連lang包下面的類都不瞭解,怎麼混。後來在網上查資料,感覺收穫頗多,現記錄如下。        物件的強、軟、弱和虛引用在JDK 1.2以

C語言迴圈的巢狀和比較

1、迴圈的巢狀 一個迴圈體內又包含另一個完整的迴圈結構,稱為迴圈的巢狀。內嵌的迴圈中還可以巢狀迴圈,這就是多層迴圈。各種語言中關於迴圈的巢狀的概念都是一樣的。   C語言中3種迴圈(while迴圈、do…while迴圈和for迴圈)可以互相巢狀。例如,下面幾種都是合法的形式: (1)wh

C語言沒有定義bool型別

今天才發現C語言中原來沒有定義bool型別。 如果要在C語言中使用bool型別,可以自己定義。 定義方式如下: #ifndef __cplusplus typedef char bool; #define false 0 #define true 1 #endif

C語言筆記之資料儲存型別

變數的儲存型別是指儲存變數值的記憶體型別。變數的儲存型別決定變數何時建立,何時銷燬以及他的值要儲存多久。 在任何程式碼塊之外申明的變數總是儲存與靜態記憶體中(不屬於堆疊的記憶體),這叫做靜態(static)變數。對於這種變數,你無法為他們指定其

C語言輸出除錯資訊的方法

在除錯程式時,輸出除錯資訊是一種普遍、有效的方法。輸出除錯資訊一般有以下五種方法: 方法一:直接使用螢幕列印函式printf。 該方法直接在需要輸出除錯資訊的位置使用函式printf輸出相應的除錯資訊,以及某些關鍵變數的值。我們通過以下求階層的函式fact來看看該方法的除

2、C語言變數的儲存,生存週期,作用範圍分類

C語言中變數的儲存類別一:按作用域劃分1、區域性變數:自動區域性變數、靜態區域性變數、暫存器變數。(區域性可見性)2、全域性變數:靜態外部變數、外部變數。(全域性可見性)二:按生存周期劃分1、動態儲存:自動變數、暫存器變數、形式引數。(生存時間只限於其作用範圍)2、靜態儲存:靜態區域性變數、靜態外部變數、外

關於c語言特殊預定義符號的使用

1. 在c語言中,有一些特殊的預定義符號,這些預定義結合使用,會產生非常有趣的事情。下面,介紹一下這些特殊的預定義符號:      _ _FINE_ _   //進行編譯的原始檔      _ _LINE_ _    //檔案被編譯的當前行號      _ _ DATE_

c語言基本的資料型別

基本資料型別1:邏輯型別。只有兩個量true和false,表示邏輯真值和邏輯假值。整數型別。C支援四種整數型別:char, short, int和long,整數型別用於處理整數。浮點型別。C支援兩種浮點型別:float和double,浮點型別用於處理包含小數部分的數值。voi