#include iostream
專業(yè)從事做網站、成都網站建設,高端網站制作設計,成都微信小程序,網站推廣的成都做網站的公司。優(yōu)秀技術團隊竭力真誠服務,采用HTML5建站+CSS3前端渲染技術,成都響應式網站建設,讓網站在手機、平板、PC、微信下都能呈現。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
using namespace std;
int m=8;
void function()
{
int n=5;
coutmendl;
}
int main()
{
int a=10;
coutaendl;
function();
coutmendl;
return 1;
}
首先介紹一下變量吧,靜態(tài)變量等就不說了,只說比較一般常見的變量
變量,都是有其生命周期的,像人一樣出生,死亡
在一個函數里聲明的變量,聲明的時候"出生"了,這個函數結束后它也跟著死亡了
而main()函數,它也是一個函數,但是是最主要的函數,因此叫main
一個程序執(zhí)行的過程,就是從main()的第一行代碼執(zhí)行到最后一行代碼
我們現在假設有個光標指著正在運行的那一行代碼,現在演示一下程序運行的過程
總是從main()開始的
main()里4行代碼,
第一行a"出生"了(執(zhí)行完最后一行return 1;則變量a的生命結束了)
第二行把a的值輸出
第二行執(zhí)行function()
1.現在光標跳到function()函數的第一行int n=5;(局部變量n出生了,并且值為5)
2.繼續(xù)執(zhí)行下一行代碼coutmendl;至此function()函數里的代碼執(zhí)行完畢了,這個函數被用完了,這個函數里的局部變量n現在也死掉了(不存在了)
光標跳回到main()函數里,
繼續(xù)執(zhí)行下一行coutaendl;把a的值輸出
下一行,把全局變量m的值輸出
再執(zhí)行下一行return 1;
至此main()函數也執(zhí)行完畢,那么main()里的變量a也會被銷毀(可以看做是main函數里的局部變量,main函數運行完了,這個變量也要消失了)
這就是程序運行的過程,就是一條一條執(zhí)行main函數的語句,這過程中可能會跳到別的地方去
總結:a是main()函數里的變量,只在main里有效,且壽命和main()函數是一致的,n是function函數里的變量,只在function函數里有效,
如在main函數里操作n,或者在function函數里操作a,都是錯誤的,而m被放在所有函數的外面,
它是全局變量,不是屬于某個函數的,所有函數都可以操作它,程序運行起來它就誕生,程序關閉了它消亡
至于子函數是否需要返回值,則完全取決于自己的需要,看下面的程序,倆對比著看
-----------------------
函數的int function1(int n),在main里執(zhí)行int b=function1(a)這句話時,從main()里跳到function1()函數里,
并且function1()里產生了一個局部變量n,接受了a的值5,現在function1()函數里有個局部變量n=5;最后把值25return了回去,
25賦值給main函數里的b;
#include iostream
using namespace std;
int function1(int n)
{
return n*n;
}
int main()
{
int a=5;
int b=function1(a);
coutbendl;
return 1;
}
--------------------
函數void function2(int n),是引用,就記住只要加這個符號,那么現在n不再是一個拷貝(一個臨時的局部變量),而代表著原來的數
那么main里執(zhí)行function2(a);現在n代表的a本身(不是a的一個拷貝),在function2()里操作n,就是在操作main里面的a,現在n=n*n.
那么就是a=a*a,main里面的a已經變成了25,直接輸出就可以了,不需要像第一個函數那樣有返回值
#include iostream
using namespace std;
void function2(int n)
{
n=n*n;
}
int main()
{
int a=5;
function2(a);
coutaendl;
return 1;
}
-----------------------
子函數需不需要參數,是要聲明為void還是有返回值的某種類型如int,都是在了解變量的作用域(活動范圍,在什么地方有效)的基礎上,
完全是根據自己的需要來確定的. 再對比著看倆程序體會一下,
#include iostream
using namespace std;
int a=8;
void function2()
{
a=a*a;
}
int main()
{
coutaendl; //輸出8
function2();
coutaendl; //a的值已經是64了,輸出64;
return 1;
}
---------------------------
#include iostream
using namespace std;
int a=8;
int function2()
{
return a*a;
}
int main()
{
coutaendl; //輸出8
coutfunction2()endl; //a的值仍然是8,但是function2()得返回值是a*a,輸出64;
return 1;
}
局部變量是指在程序中,只在特定過程或函數中可以訪問的變量,是相對于全局變量而言的。
在C語言中,局部變量可以和全局變量重名,但是局部變量會屏蔽全局變量。
#include
int fun(int a)
{
int temp; // 變量temp就是定義的一個局部變量,在fun函數執(zhí)行完后,其在內存中占用的內存區(qū)就會釋放回收
temp = 2*a;
return temp;
}
int b; // 變量b就是一個全局變量,當程序執(zhí)行完后,才釋放其占用的內存
void main()
{
int a=2; // 變量a也是局部變量
b = fun();
}
函數是一組一起執(zhí)行一個任務的語句。每個 C 程序都至少有一個函數,即主函數 main() ,所有簡單的程序都可以定義其他額外的函數。
您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常是根據每個函數執(zhí)行一個特定的任務來進行的。
C 標準庫提供了大量的程序可以調用的內置函數。例如,函數 strcat() 用來連接兩個字符串,函數 memcpy() 用來復制內存到另一個位置。
函數還有很多叫法,比如方法、子例程或程序,等等。
C 語言中的函數定義的一般形式如下:
在 C 語言中,函數由一個函數頭和一個函數主體組成。下面列出一個函數的所有組成部分:
以下是 max() 函數的源代碼。該函數有兩個參數 num1 和 num2,會返回這兩個數中較大的那個數:
創(chuàng)建 C 函數時,會定義函數做什么,然后通過調用函數來完成已定義的任務。
當程序調用函數時,程序控制權會轉移給被調用的函數。被調用的函數執(zhí)行已定義的任務,當函數的返回語句被執(zhí)行時,或到達函數的結束括號時,會把程序控制權交還給主程序。
調用函數時,傳遞所需參數,如果函數返回一個值,則可以存儲返回值。例如:
如上把 max() 函數和 main() 函數放一塊,編譯源代碼。當運行最后的可執(zhí)行文件時,會產生下列結果:
形式參數就像函數內的其他局部變量,在進入函數時被創(chuàng)建,退出函數時被銷毀。
當調用函數時,有兩種向函數傳遞參數的方式:
默認情況下,C 使用 傳值調用 來傳遞參數。一般來說,這意味著函數內的代碼不能改變用于調用函數的實際參數。
根據使用范圍來區(qū)分的。
1。局部變量
他是 指在函數內部定義的變量 作用域為定義局部變量的函數 也就是說他只能在定義他的函數中使用
最值得注意的是 只有在程序執(zhí)行到定義他的模塊時才能生成,一旦執(zhí)行退出該模塊則起變量消失
eg.
func ()
{
int x; 局部變量x的作用域 很明確
......
}
2。全局變量
在程序執(zhí)行的過程中一直有效
eg.
int x=1;
func ()
{
x=x+1;
}
func1 ()
{
x=x-1;
}
main ()
{
}
由此不難看出整型x的作用范圍
對于全局變量 如果在定義的時候不做初始化 則系統(tǒng)將自動為起賦值 數值型為0
字符型為空'\0'
全局變量的弊端 增加內存開銷 降低函數的通用性
定義全局變量時 理想的位置是在文件的開頭 當這些函數以及同一個程序中的其他源程序文件中的某些函數需要使用該全局變量時 在函數內部對該變量使用extern 加以說明 說明他是外部的
(這里還要做詳細的講解)
eg.
main ()
{
extern int a,b;
printf ("mIn is %d\n",min(a,b));
}
int a=1,b=2;
int min (x,y)
int x,y;
{
int z;
z=xy?x:y;
return(z);
}
我還要說明的是 對外部變量的說明和對全局變量的定義不是一回事
對外部變量的說明 只是聲明該變量是在外部定義過的一個全局變量 在這里引用 而對全局變量的定義則是要對起分配存儲單元的
一個全局變量只能定義一次 可是卻可以多次引用
*** 在同一源文件中,全局變量和局部變量同名時,在局部變量的作用域內,全局變量不起作用的。