當前位置:首頁 » 編程語言 » c語言靜態變數使用關鍵字
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言靜態變數使用關鍵字

發布時間: 2022-07-28 17:49:23

c語言中static關鍵字有哪些

C++面向過程的static和C的是一樣的。 C++的static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變數和函數,不涉及類;後者主要說明static在類中的作用。
一、面向過程設計中的static
1、靜態全局變數
在全局變數前,加上關鍵字static,該變數就被定義成為一個靜態全局變數。我們先舉一個靜態全局變數的例子,如下:
//Example 1
#include <iostream.h>
void fn();
static int n; //定義靜態全局變數
void main()
{ n=20;
cout<<n<<endl;
fn();
}
void fn()
{ n++;
cout<<n<<endl;
}
靜態全局變數有以下特點:
該變數在全局數據區分配內存;
未經初始化的靜態全局變數會被程序自動初始化為0(自動變數的值是隨機的,除非它被顯式初始化);
靜態全局變數在聲明它的整個文件都是可見的,而在文件之外是不可見的;
靜態變數都在全局數據區分配內存,包括後面將要提到的靜態局部變數。對於一個完整的程序,在內存中的分布情況如下圖:
代碼區
全局數據區
堆區
棧區
一般程序的由new產生的動態數據存放在堆區,函數內部的自動變數存放在棧區。自動變數一般會隨著函數的退出而釋放空間,靜態數據(即使是函數內部的靜 態局部變數)也存放在全局數據區。全局數據區的數據並不會因為函數的退出而釋放空間。細心的讀者可能會發現,Example 1中的代碼中將
static int n; //定義靜態全局變數
改為
int n; //定義全局變數
程序照樣正常運行。
的確,定義全局變數就可以實現變數在文件中的共享,但定義靜態全局變數還有以下好處:
靜態全局變數不能被其它文件所用;
其它文件中可以定義相同名字的變數,不會發生沖突;
您可以將上述示例代碼改為如下:
//Example 2//File1
#include <iostream.h>
void fn();
static int n; //定義靜態全局變數
void main()
{ n=20;
cout<<n<<endl;
fn();
}
//File2
#include <iostream.h>
extern int n;
void fn()
{ n++;
cout<<n<<endl;
}
編譯並運行Example 2,您就會發現上述代碼可以分別通過編譯,但運行時出現錯誤。 試著將
static int n; //定義靜態全局變數
改為
int n; //定義全局變數
再次編譯運行程序,細心體會全局變數和靜態全局變數的區別。
2、靜態局部變數
在局部變數前,加上關鍵字static,該變數就被定義成為一個靜態局部變數。
我們先舉一個靜態局部變數的例子,如下:
//Example 3
#include <iostream.h>
void fn();
void main()
{ fn();
fn();
fn();
}
void fn()
{ static int n=10;
cout<<n<<endl;
n++;
}
通常,在函數體內定義了一個變數,每當程序運行到該語句時都會給該局部變數分配棧內存。但隨著程序退出函數體,系統就會收回棧內存,局部變數也相應失效。
但有時候我們需要在兩次調用之間對變數的值進行保存。通常的想法是定義一個全局變數來實現。但這樣一來,變數已經不再屬於函數本身了,不再僅受函數的控制,給程序的維護帶來不便。
靜態局部變數正好可以解決這個問題。靜態局部變數保存在全局數據區,而不是保存在棧中,每次的值保持到下一次調用,直到下次賦新值。
靜態局部變數有以下特點:
該變數在全局數據區分配內存;
靜態局部變數在程序執行到該對象的聲明處時被首次初始化,即以後的函數調用不再進行初始化;
靜態局部變數一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化為0;
它始終駐留在全局數據區,直到程序運行結束。但其作用域為局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束;
3、靜態函數
在函數的返回類型前加上static關鍵字,函數即被定義為靜態函數。靜態函數與普通函數不同,它只能在聲明它的文件當中可見,不能被其它文件使用。
靜態函數的例子:
//Example 4
#include <iostream.h>
static void fn();//聲明靜態函數
void main()
{
fn();
}
void fn()//定義靜態函數
{ int n=10;
cout<<n<<endl;
}
定義靜態函數的好處:
靜態函數不能被其它文件所用;
其它文件中可以定義相同名字的函數,不會發生沖突;

⑵ c語言的關鍵字的解釋及其作用應用

C語言的關鍵字共有32個,根據關鍵字的作用,可分其為數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它關鍵字四類。
1 數據類型關鍵字(12個):
(1) char :聲明字元型變數或函數
(2) double :聲明雙精度變數或函數
(3) enum :聲明枚舉類型
(4) float:聲明浮點型變數或函數
(5) int: 聲明整型變數或函數
(6) long :聲明長整型變數或函數
(7) short :聲明短整型變數或函數
(8) signed:聲明有符號類型變數或函數
(9) struct:聲明結構體變數或函數
(10) union:聲明聯合數據類型
(11) unsigned:聲明無符號類型變數或函數
(12) void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用)
(2)控制語句關鍵字(12個):
A循環語句
(1) for:一種循環語句(可意會不可言傳)
(2) do :循環語句的循環體
(3) while :循環語句的循環條件
(4) break:跳出當前循環
(5) continue:結束當前循環,開始下一輪循環
B條件語句
(1)if: 條件語句
(2)else :條件語句否定分支(與 if 連用)
(3)goto:無條件跳轉語句
C開關語句
(1)switch :用於開關語句
(2)case:開關語句分支
(3)default:開關語句中的「其他」分支
D return :子程序返回語句(可以帶參數,也看不帶參數)
3 存儲類型關鍵字(4個)
(1)auto :聲明自動變數 一般不使用
(2)extern:聲明變數是在其他文件正聲明(也可以看做是引用變數)
(3)register:聲明積存器變數
(4)static :聲明靜態變數
4 其它關鍵字(4個):
(1)const :聲明只讀變數 (
2)sizeof:計算數據類型長度
(3)typedef:用以給數據類型取別名(當然還有其他作用 (4)volatile:說明變數在程序執行中可被隱含地改變
char 8
int 16
long 32
float 32
double 64
這是占的位數 bit
1 Byte=8 bit
除以8就是位元組數 byte
希望對你有幫助,如果想要好好學,建議買一本譚浩強老師的書看一下,還是比較詳細的

⑶ C語言裡面靜態變數static是什麼作用啊

static關鍵字在C語言中用於聲明一個靜態的局部變數。
作用:
有時希望函數中的局部變數的值在函數調用結束後不消失而繼續保留原值,即其佔用的存儲單元不釋放,在下一次再調用該函數時,該變數已有值(就是上一次函數調用結束時的值)。這時就應該指定該局部變數為「靜態局部變數」,用關鍵字static進行聲明。

用靜態存儲要多佔內存(長期佔用不釋放,而不能像動態存儲那樣一個存儲單元可以先後為多個變數使用,節約內存),而且降低了程序的可讀性,因此若非必要,不要多用靜態局部變數。

⑷ c語言中靜態變數是怎麼用的

c語言中靜態變數作常量使用,用於存儲常數。可用const,constant或final等關鍵字標識,其值就會在編譯時設定,並且無法在運行時改變。編譯器通常將靜態常量與文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區;而如若有需要,有些編譯器還可選擇為其開辟專用區。

對於靜態全局變數來說,針對某一源文件的以static聲明的文件級變數與函數的作用域只限於文件內(只在文件內可見),也即「內部連接」,因而可以用來限定變數的作用域。

(4)c語言靜態變數使用關鍵字擴展閱讀:

在函數內以static聲明的靜態局部變數雖然與自動局部變數的作用域相同(即作用域都只限於函數內),但存儲空間是以靜態分配而非默認的自動分配方式獲取的,因而存儲空間所在區域不同。

一般來說,靜態分配時存儲空間於編譯時在程序數據段分配,一次分配全程有效;而自動分配時存儲空間則是於調用棧上分配,只在調用時分配與釋放,且兩次調用間變數值始終保持一致;必須注意,靜態局部變數只能初始化一次,這是由編譯器來保證實現。

⑸ 在C語言中什麼叫關鍵字,怎麼用

C語言的關鍵字共有32個,根據關鍵字的作用,可分其為數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它關鍵字四類。

1、數據類型關鍵字(12個):

(1) char :聲明字元型變數或函數

(2) double :聲明雙精度變數或函數

(3) enum :聲明枚舉類型

(4) float:聲明浮點型變數或函數

(5) int: 聲明整型變數或函數

(6) long :聲明長整型變數或函數

(7) short :聲明短整型變數或函數

(8) signed:聲明有符號類型變數或函數

(9) struct:聲明結構體變數或函數

(10) union:聲明聯合數據類型

(11) unsigned:聲明無符號類型變數或函數

(12) void :聲明函數無返回值或無參數,聲明無類型指針(基本上就這三個作用)

2、控制語句關鍵字(12個):

A循環語句 :(1) for:一種循環語句(可意會不可言傳) (2) do :循環語句的循環體 (3) while :循環語句的循環條件 (4) break:跳出當前循環 (5) continue:結束當前循環,開始下一輪循環

B條件語句: (1)if: 條件語句 (2)else :條件語句否定分支(與 if 連用) (3)goto:無條件跳轉語句

C開關語句: (1)switch :用於開關語句 (2)case:開關語句分支 (3)default:開關語句中的「其他」分支

D return :子程序返回語句(可以帶參數,也看不帶參數)

3 、存儲類型關鍵字(4個):

(1)auto :聲明自動變數 一般不使用 (2)extern:聲明變數是在其他文件正聲明(也可以看做是引用變數) (3)register:聲明積存器變數 (4)static :聲明靜態變數

4、其它關鍵字(4個): (1)const :聲明只讀變數 (2)sizeof:計算數據類型長度 (3)typedef:用以給數據類型取別名(當然還有其他作用 (4)volatile:說明變數在程序執行中可被隱含地改變。

(5)c語言靜態變數使用關鍵字擴展閱讀:

C語言簡潔、緊湊,使用方便、靈活。ANSI C標准C語言共有32個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。 C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。

語法限制不太嚴格,程序設計自由度大:雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度。

允許直接訪問內存地址,對硬體進行操作。由於C語言允許直接訪問內存地址,可以直接對硬體進行操作,因此它既具有高級語言的功能,又具有低級語言的許多功能,能夠像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元,可用來寫系統軟體。

生成目標代碼質量高,程序執行效率高:一般只比經過高效優化的匯編程序生成的目標代碼效率低10へ20%。

適用范圍大,可移植性好:C語言有一個突出的優點就是適合於多種操作系統,如DOS、UNIX、windows 98.windows NT;也適用於多種機型。C語言具有強大的繪圖能力,可移植性好,並具備很強的數據處理能力,因此適於編寫系統軟體,三維,二維圖形和動畫,它也是數值計算的高級語言。

參考資料來源:網路C語言關鍵字

⑹ c語言中const、static關鍵字的用法

const是指常數,這種數存放在rom中,也就是硬碟里,只有使用的時候才讀取到內存。static類型的是局部靜態數據,首先他肯定是局部變數,但是他的生存期是全局的。const數不能被修改,也不能是局部變數。static一般用於局部變數,但是他可以被修改,並且退出引用他的函數體後變數依舊存在,直到下一次引用時數值不變化。

⑺ static在c語言中是什麼意思

static在c語言中是「靜態」的意思,用於在函數中聲明「靜態變數」用,在每一次調用後,該變數並不在函數返回時立即釋放,變數中保存的值,可以保留到下一次調用時繼續有效。