任何一種編程語言都離不開變量,特別是數(shù)據(jù)處理型程序,變量的使用非常頻繁,沒有變量參與程序甚至無法編制,即使編制運行后的意義也不大。變量之所以重要,是因為變量是編程語言中數(shù)據(jù)的符號標識和載體。
成都創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元平山做網(wǎng)站,已為上家服務(wù),為平山各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
C語言是一種應(yīng)用廣泛的善于實現(xiàn)控制的語言,變量在C語言中的應(yīng)用更是靈活多變。那么變量究竟是什么呢?變量是內(nèi)存或寄存器中用一個標識符命名的存儲單元,可以用來存儲一個特定類型的數(shù)據(jù),并且數(shù)據(jù)的值在程序運行過程中可以進行修改??梢?,變量首先是一個標識符或者名稱,就像一個客房的編號一樣,有了這個編號我們在交流中就可方便言表,否則,我們只可意會,那多不方便。為了方便,我們在給變量命名時,最好能符合大多數(shù)人的習慣,基本可以望名知義,便于交流和維護;其次,變量是唯一確定的對應(yīng)內(nèi)存若干存儲單元或者某個寄存器。這些是編譯器來保證的,用戶一般不用費心。
程序員一旦定義了變量,那么,變量就至少可為我們提供兩個信息:一是變量的地址,即就是,操作系統(tǒng)為變量在內(nèi)存中分配的若干內(nèi)存的首地址;二是變量的值,也就是,變量在內(nèi)存中所分配的那些內(nèi)存單元中所存放的數(shù)據(jù)。
由于程序的多樣需要,我們對變量也有各種各樣的要求,比如:變量的生命期,變量的初始狀態(tài),變量的有效區(qū)域,變量的開辟地和變量的開辟區(qū)域的大小等等;為了滿足這些要求,C語言的發(fā)明者就設(shè)置了以下變量:
1、 不同數(shù)據(jù)類型的變量;如:char cHar, int iTimes, flaot faverage;
2、 全局變量或者叫全程變量;
3、 局部變量;
4、 靜態(tài)變量: 靜態(tài)全局變量和靜態(tài)局部變量;關(guān)鍵詞:static
5、 寄存器變量;關(guān)鍵詞:register;
6、 外部變量: 關(guān)鍵詞:extern;
C語言中,變量在內(nèi)存中開辟地的大小由數(shù)據(jù)類型決定的,由于PC機中規(guī)定一個地址單元存一個字節(jié),不同的數(shù)據(jù)類型的變量,為其分配的地址單元數(shù)是不一樣的。C語言中除幾種基本的數(shù)據(jù)類型外用戶還可以自己定義所需要的數(shù)據(jù)類型:
1、 bool型 sizeof(bool): 1
2、 char型: sizeof(char): 1
3、 short型: sizeof(short): 2
4、 int型: sizeof(int): 4
5、 long型: sizeof(long): 4
6、 float型: sizeof(float): 4
7、 double型: sizeof(double): 8
8、 自定義型:如:
typedef struct tagMyData
{
char cHar;
int iTimes;
float faverage;
}MyDatap;
sizeof(MyDatap): 12
char szBuf[]="HELLO CC++!";
sizeof(szBuf): 13
局部變量和全局變量是相對而言的;如下:局部變量 int itmp;
int Get_Max( const int x, const int y, const int z )
{
int itmp;
if(x y) itmp = x;
else itmp = y;
if( itmp z ) return itmp;
else return z;
}
在函數(shù)內(nèi)部說明的變量為局部變量,只有在函數(shù)執(zhí)行時,局部變量才存在,當函數(shù)執(zhí)行完退出后,局部變量隨之消失。也就是,當函數(shù)執(zhí)行完退出后,原先在函數(shù)內(nèi)定義的變量現(xiàn)在不能用,這通常由編譯器保證,它會阻止編譯通過。也就是說,原來為那個局部變量分配的內(nèi)存,現(xiàn)在已經(jīng)不屬于它,它再無權(quán)訪問了。如要再使用這些內(nèi)存單元就必須從新定義變量來申請,只有分配給的變量才可訪問它。否則,就會出錯,如數(shù)組越界訪問。
與局部變量不同,全局變量在整個程序都是可見的,可在整個程序運行過程中,對于任何一個程序都是可用的。全局變量的說明的位置在所有函數(shù)之外,但可被任何一個函數(shù)使用,讀取或者寫入。如下:全局變量 int iCount, bool bForward;
int iCount; //全局變量;
bool bForward; //全局變量;
void add( void );
void dec( void );
void man(void )
{
while( iCount 1000 iCount -1000)
{
add( );
dec( );
printf("COUNT:%d;\n", iCount)
}
}
void add( void )
{
if( bForward ) iCount++;
}
void dec( void )
{
if(!bForward ) iCount--;
}
可見,全局變量非常方便不同函數(shù)間數(shù)據(jù)共享,同樣,任何函數(shù)在在使用數(shù)據(jù)時,都不敢保證數(shù)據(jù)是否已被修改。如果程序員無法保證這個,就盡量避免使用全局變量。
靜態(tài)變量是分配在存儲器中C程序所占據(jù)的數(shù)據(jù)段內(nèi), C程序運行的整個過程中一直保留,不會被別的變量占用。靜態(tài)變量可以定義成全局變量或局部變量,當定義為全局變量時,在它定義的程序的整個運行期間均存在并且保持原來的存儲單元位置不會改變。那么既然有了全局變量為什么還要定義全局靜態(tài)變量呢?看下邊的示例:
定義在函數(shù)體外部的變量叫全局變量,
要定義全局變量你只要把變量定義在
所有函數(shù)外部即可。
要注意的是,全局變量只對它定義位
置以下的函數(shù)可見。
#includestdio.h?
void?f1();
void?f2();
int?y=100;
int?main()
{
printf("%d\n\n",y);
//printf("%d\n",x);這不可以讀x,x對main()不可見?
f1();
f2();
return?0;
}
int?x;
void?f1()
{
x=200;
}?
void?f2()
{
printf("%d\n",x);
printf("%d\n",y);
}
因為函數(shù)jiec()是你自己定義并編輯的,在C語言中凡是操作員自己定義的函數(shù)都要在使用前申明,在C語言中系統(tǒng)自帶的函數(shù)是通過include語句進行引用定義的,比如字符函數(shù)通過includestring.h進行申明,即你要引用的字符函數(shù)都在string.h里定義了
定義函數(shù)
C 語言中的函數(shù)定義的一般形式如下:
return_type function_name( parameter list )
{
body of the function
}
在 C 語言中,函數(shù)由一個函數(shù)頭和一個函數(shù)主體組成。下面列出一個函數(shù)的所有組成部分:
返回類型:一個函數(shù)可以返回一個值。return_type 是函數(shù)返回的值的數(shù)據(jù)類型。有些函數(shù)執(zhí)行所需的操作而不返回值,在這種情況下,return_type 是關(guān)鍵字 void。
函數(shù)名稱:這是函數(shù)的實際名稱。函數(shù)名和參數(shù)列表一起構(gòu)成了函數(shù)簽名。
參數(shù):參數(shù)就像是占位符。當函數(shù)被調(diào)用時,您向參數(shù)傳遞一個值,這個值被稱為實際參數(shù)。參數(shù)列表包括函數(shù)參數(shù)的類型、順序、數(shù)量。參數(shù)是可選的,也就是說,函數(shù)可能不包含參數(shù)。
函數(shù)主體:函數(shù)主體包含一組定義函數(shù)執(zhí)行任務(wù)的語句。