1.普通全域變數
概念:定義在函式之外的變數,叫做普通的全域變數;
作用范圍:在“整個工程中”,只需要在一個源檔案中進行定義,然后在這個工程下的所有源檔案中都可以進行使用,用extern進行申明即可。
生存周期:隨行程開始而開始,隨行程結束而結束。
記憶體分配:靜態全域區
eg:
#include<iostream>
#include<stdio.h>
int a;//定義的普通全域變數
int main()
{
printf("a = %d\n", a); //輸出a的默認值
a = 100;
printf("a = %d\n", a);//重新給a賦值后,輸出a的值
system("pause");
return(0);
}
運行結果:

注:如果普通全域變數沒有賦初值,則默認賦初值為0。
2.靜態全域變數
概念:定義在函式之外的變數,并且用static關鍵字修飾的變數叫做靜態全域變數;
作用范圍:在“一個源檔案中”,在一個源檔案中進行定義,然后在本源檔案中就可以使用,但是不能在其他源檔案中進行使用。
生存周期:隨行程開始而開始,隨行程結束而結束。
記憶體分配:靜態全域區
2.普通區域變數
概念:定義在函式內的變數,叫普通區域變數;
作用范圍:從定義的位置開始,到定義它的右花括號結束,只在函式執行期間存在,函式的一次呼叫執行結束后,變數被撤銷,其所占用的記憶體也被識訓。
生存周期:從定義開始到函式結束,函式呼叫后變數就被撤銷,記憶體被回收。
記憶體分配:堆疊區
2.靜態區域變數
概念:定義在函式內的變數,并且用static關鍵字修飾的變數叫做靜態區域變數;
作用范圍:區域的函式內,它只被初始化一次,自從第一次被初始化直到程式運行結束都一直存在,和區域變數的區別在于函式執行完也還存在。
生存周期:隨行程開始而開始,隨行程結束而結束。
記憶體分配:靜態全域區
eg:
#include<iostream>}
#include<stdio.h>
int a;//定義的普通全域變數
static int b;//定義的靜態全域變數
int fun1()
{
a = 10;
a++;
return(a);
}
int fun2()
{
b = 10;
b++;
return(b);
}
void fun3()
{
int c = 10;
c++;
printf("c = %d\n", c); //輸出c運行后的值
}
void fun4()
{
static int d = 10;
d++;
printf("d = %d\n", d);//輸出d運行后的值
}
int main()
{
printf("a默認值 = %d\n", a); //輸出a的默認值
printf("b默認值 = %d\n", b); //輸出b的默認值
fun1();
fun1();
printf("a = %d\n", a); //輸出a運行后的值
fun2();
fun2();
printf("b = %d\n", b); //輸出b運行后的值
fun3();
fun3();
fun4();
fun4();
system("pause");
return(0);

可以看出,靜態區域變數只是在第一次呼叫的時候開辟空間進行賦值,函式結束后,不會釋放空間;以后再進行呼叫函式的時候,就不會再為其開辟空間了,也不會賦初值,用的還是以前的變數。
uj5u.com熱心網友回復:
為了說明自己的想法,發明和生造了額外的術語。這是結合了識別符號的作用域和變數的生存期而發明的新術語,有才。在下不勝欽服!uj5u.com熱心網友回復:
靜態區域變數只是在第一次呼叫的時候開辟空間進行賦值有問題
uj5u.com熱心網友回復:
樓主可以把動態申請的空間加入進來,比如malloc/free, new/deleteuj5u.com熱心網友回復:
學習了學習了學習了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/11065.html
標籤:C語言
上一篇:MATLAB仿真激光測距方程
下一篇:c++
