兩者的區(qū)別只在于作用域和生存周期。main函數(shù)是一個(gè)進(jìn)程的入口,此外,和別的函數(shù)無區(qū)別。
創(chuàng)新互聯(lián)專注于泰來企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),成都商城網(wǎng)站開發(fā)。泰來網(wǎng)站建設(shè)公司,為泰來等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
1、main函數(shù)里定義的是局部變量,只是在main函數(shù)里有效。
2、如果程序里有多個(gè)函數(shù),定義的全局變量在這些函數(shù)里都可以使用,而在main中定義的只能在main中使用,其他函數(shù)不可以直接調(diào)用。
3、題目中的兩個(gè)程序的區(qū)別只在于程序一的a和s變量是全局變量,程序二的a和s變量是局部變量。
4、全局變量是程序的各個(gè)函數(shù)都可以調(diào)用的,而局部變量只在函數(shù)內(nèi)部有效。
擴(kuò)展資料:
全局變量是編程術(shù)語中的一種,源自于變量之分。
變量分為局部與全局,局部變量又可稱之為內(nèi)部變量。由某對(duì)象或某個(gè)函數(shù)所創(chuàng)建的變量通常都是局部變量,只能被內(nèi)部引用,而無法被其它對(duì)象或函數(shù)引用。
全局變量既可以是某對(duì)象函數(shù)創(chuàng)建,也可以是在本程序任何地方創(chuàng)建。全局變量是可以被本程序所有對(duì)象或函數(shù)引用。
局部變量(Local
variables)指在程序中只在特定過程或函數(shù)中可以訪問的變量。局部變量是相對(duì)于全局變量而言的。在C++、C#、Ruby這些面向?qū)ο笳Z言中,一般只使用局部變量。
面向?qū)ο缶幊淌乾F(xiàn)在普遍采用的是軟件開發(fā)方法,因此無需考慮是局部變量還是全局變量,說到變量,往往都是局部變量。
參考資料:百度百科-局部變量
參考資料:百度百科-全局變量
任何一種編程語言都離不開變量,特別是數(shù)據(jù)處理型程序,變量的使用非常頻繁,沒有變量參與程序甚至無法編制,即使編制運(yùn)行后的意義也不大。變量之所以重要,是因?yàn)樽兞渴蔷幊陶Z言中數(shù)據(jù)的符號(hào)標(biāo)識(shí)和載體。
C語言是一種應(yīng)用廣泛的善于實(shí)現(xiàn)控制的語言,變量在C語言中的應(yīng)用更是靈活多變。那么變量究竟是什么呢?變量是內(nèi)存或寄存器中用一個(gè)標(biāo)識(shí)符命名的存儲(chǔ)單元,可以用來存儲(chǔ)一個(gè)特定類型的數(shù)據(jù),并且數(shù)據(jù)的值在程序運(yùn)行過程中可以進(jìn)行修改??梢?,變量首先是一個(gè)標(biāo)識(shí)符或者名稱,就像一個(gè)客房的編號(hào)一樣,有了這個(gè)編號(hào)我們?cè)诮涣髦芯涂煞奖阊员?,否則,我們只可意會(huì),那多不方便。為了方便,我們?cè)诮o變量命名時(shí),最好能符合大多數(shù)人的習(xí)慣,基本可以望名知義,便于交流和維護(hù);其次,變量是唯一確定的對(duì)應(yīng)內(nèi)存若干存儲(chǔ)單元或者某個(gè)寄存器。這些是編譯器來保證的,用戶一般不用費(fèi)心。
程序員一旦定義了變量,那么,變量就至少可為我們提供兩個(gè)信息:一是變量的地址,即就是,操作系統(tǒng)為變量在內(nèi)存中分配的若干內(nèi)存的首地址;二是變量的值,也就是,變量在內(nèi)存中所分配的那些內(nèi)存單元中所存放的數(shù)據(jù)。
由于程序的多樣需要,我們對(duì)變量也有各種各樣的要求,比如:變量的生命期,變量的初始狀態(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機(jī)中規(guī)定一個(gè)地址單元存一個(gè)字節(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
局部變量和全局變量是相對(duì)而言的;如下:局部變量 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í),局部變量才存在,當(dāng)函數(shù)執(zhí)行完退出后,局部變量隨之消失。也就是,當(dāng)函數(shù)執(zhí)行完退出后,原先在函數(shù)內(nèi)定義的變量現(xiàn)在不能用,這通常由編譯器保證,它會(huì)阻止編譯通過。也就是說,原來為那個(gè)局部變量分配的內(nèi)存,現(xiàn)在已經(jīng)不屬于它,它再無權(quán)訪問了。如要再使用這些內(nèi)存單元就必須從新定義變量來申請(qǐng),只有分配給的變量才可訪問它。否則,就會(huì)出錯(cuò),如數(shù)組越界訪問。
與局部變量不同,全局變量在整個(gè)程序都是可見的,可在整個(gè)程序運(yùn)行過程中,對(duì)于任何一個(gè)程序都是可用的。全局變量的說明的位置在所有函數(shù)之外,但可被任何一個(gè)函數(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í),都不敢保證數(shù)據(jù)是否已被修改。如果程序員無法保證這個(gè),就盡量避免使用全局變量。
靜態(tài)變量是分配在存儲(chǔ)器中C程序所占據(jù)的數(shù)據(jù)段內(nèi), C程序運(yùn)行的整個(gè)過程中一直保留,不會(huì)被別的變量占用。靜態(tài)變量可以定義成全局變量或局部變量,當(dāng)定義為全局變量時(shí),在它定義的程序的整個(gè)運(yùn)行期間均存在并且保持原來的存儲(chǔ)單元位置不會(huì)改變。那么既然有了全局變量為什么還要定義全局靜態(tài)變量呢?看下邊的示例:
外部變量是在函數(shù)外部定義的全局變量,它的作用域是從變量的定義處開始,到本程序文件的結(jié)尾。在此作用域內(nèi),全局變量可為各個(gè)函數(shù)所引用。編譯時(shí)將外部變量分配在靜態(tài)存儲(chǔ)區(qū)。
有時(shí)要用extern來聲明外部變量,以擴(kuò)展外部變量的作用域。 也可用static聲明外部變量,使該變量不能被其他文件引用。
用extern聲明外部變量
extern可省略不寫。
本文件里:在一個(gè)文件里,有不止一個(gè)函數(shù),外部變量在第一個(gè)函數(shù)后面定義。若用extern在第一個(gè)函數(shù)前聲明該變量則該變量可以在第一個(gè)函數(shù)中使用。
多個(gè)文件中:在其他文件中若想要用該文件中已聲明的變量,則在文件頭部聲明該變量,即可在文件中使用。
用static聲明外部變量
static聲明后該外部變量就只能在本文件中使用。
定義在函數(shù)體外部的變量叫全局變量,
要定義全局變量你只要把變量定義在
所有函數(shù)外部即可。
要注意的是,全局變量只對(duì)它定義位
置以下的函數(shù)可見。
#includestdio.h?
void?f1();
void?f2();
int?y=100;
int?main()
{
printf("%d\n\n",y);
//printf("%d\n",x);這不可以讀x,x對(duì)main()不可見?
f1();
f2();
return?0;
}
int?x;
void?f1()
{
x=200;
}?
void?f2()
{
printf("%d\n",x);
printf("%d\n",y);
}
1、首先,我們可以在函數(shù)外面定義變量,就是全局變量。
2、局部變量可以與全局變量同樣命名。
3、但是優(yōu)先級(jí)是局部變量?jī)?yōu)先。
4、但是局部變量的生命周期是整個(gè)結(jié)構(gòu)內(nèi)。
5、全局變量是整個(gè)程序結(jié)束,才釋放。
6、我們也可以為變量加上修飾符。