关于静态局部全局变量
一. 全局變量
全局變量是在所有函數體的外部定義的,程序的所有部分(其他文件的代碼)都可以使用。全局變量不受作用域的影響。全局變量的生命周期一直到程序的結束,全局變量是靜態存儲方式。
例:
#include <stdio.h>
#include <stdlib.h>
/* a 就是一個全局變量*/
int a = 2;
int main(int argc, char *argv[]) {
printf(“int 存儲大小 : %d \n”, a);
return 0;
}
如果在一個文件中使用extern關鍵字來聲明另一個文件中存在的全局變量,那么這個文件可以使用這個變量。
例:
在a.c中定義一個全局變量
#include <stdio.h>
#include <stdlib.h>
int a = 3;/定義在a.c文件中的全局變量a/
在main.c中使用extern關鍵字引用a.c中的全局變量a
#include <stdio.h>
#include <stdlib.h>
/* 使用extern管金子引用a.c中的全局變量a*/
extern int a;
int main(int argc, char *argv[]) {
printf(“int 存儲大小 : %d \n”, a);
return 0;
}
二.局部變量
局部變量出現在一個作用域內,它們是局限于一個函數的。局部變量經常被稱為自動變量,因為它們在進入作用域時,自動生成,離開作用域時自動消失。關鍵字auto可以顯示的說明這個問題,但局部變量默認為auto,所以沒必要聲明為auto。通常函數里定義的變量,函數的參數都局部變量。所以一般需要在某個函數里,返回數組的地址或者指針之類,這時候必須定義成static,或者動態申請內存,這樣函數結束返回時才不會釋放掉那塊內存空間。
寄存器變量也是一種局部變量。register來修飾,就是告訴編譯器盡可能快的訪問這個變量,通過存放在寄存器中來實現快速訪問。
三.靜態變量
靜態變量的修飾關鍵字是static,static可以作用于變量以及函數。由static修飾的,可分為靜態局部變量,靜態全局變量,靜態函數。靜態變量的生命期和程序生命期是一樣的,在程序結束之后操作系統會回收空間。 靜態變量當然是屬于靜態存儲方式,但是屬于靜態存儲方式的量不一定就是靜態變量。 例如外部變量雖屬于靜態存儲方式,但不一定是靜態變量,必須由 static加以定義后才能成為靜態外部變量,或稱靜態全局變量
1.靜態局部變量
在局部變量前面加上static后,就定義了靜態局部變量,靜態局部變量屬于靜態存儲方式,靜態局部變量只會被初始化一次,下次使用依據上一次保存的值。它具有以下特點:
(1) 靜態局部變量在函數內定義 ,它的生存期為整個源程序,但是其作用域仍與自動變量相同,只能在定義該變量的函數內使用該變量。退出該函數后, 盡管該變量還繼續存在,但不能使用它。(作用域不變,生存周期變了)
(2) 允許對構造類靜態局部量賦初值 ,例如數組,若未賦以初值,則由系統自動賦以0值。(而非靜態局部變量未賦初始值,系統會給個隨機值)
(3) 對基本類型的靜態局部變量,若在說明時未賦以初值,則系統自動賦予0值。而對自動變量沒有賦初值,則其值是隨機值。
靜態局部變量是一種生存期為整個源程序的量。雖然離開定義它的函數后不能使用,但如再次調用定義它的函數時,它又可繼續使用, 而且保存了上次被調用后留下的值。 因此,當多次調用一個函數且要求在調用之間保留某些變量的值時,可考慮采用靜態局部變量。雖然用全局變量也可以達到上述目的,但全局變量有時會造成意外的副作用,因此仍以采用局部靜態變量為宜。
2.靜態全局變量
全局變量(外部變量)的說明之前再加static 就構成了靜態全局變量。static全局變量只初使化一次,防止在其他文件單元中被引用。全局變量本身就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。 這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用, 因此可以避免在其它源文件中引起錯誤。
四.常量
常量是固定值,在程序執行期間不會改變。這些固定的值,又叫做字面量。
常量可以是任何的基本數據類型,比如整數常量、浮點常量、字符常量,或字符串字面值,也有枚舉常量。
常量就像是常規的變量,只不過常量的值在定義后不能進行修改。
定義常量
在 C 中,有兩種簡單的定義常量的方式:
使用 #define 預處理器。
使用 const 關鍵字。
#define 例子:
#include <stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE ‘\n’
int main()
{
int area;
area = LENGTH * WIDTH;
printf(“value of area : %d”, area);
printf("%c", NEWLINE);
return 0;
}
const 例子:
#include <stdio.h>
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = ‘\n’;
int area;
area = LENGTH * WIDTH;
printf(“value of area : %d”, area);
printf("%c", NEWLINE);
return 0;
}
【程序41】題目:學習static定義靜態變量的用法
static有兩種用法:面向過程程序設計中的static
面向對象程序設計中的static
這里的是:面向過程
靜態全局變量:在全局變量前,加上關鍵字static,該變量就被定義成為一個靜態全局變量。
靜態局部變量:在局部變量前,加上關鍵字static,該變量就被定義成為一個靜態局部變量。
靜態函數:在函數的返回類型前加上static關鍵字,函數即被定義為靜態函數。
靜態函數與普通函數不同,它只能在聲明它的文件當中可見,不能被其它文件使用。
*/
#include <stdio.h>
void fun()
{
int var = 0;
static int static_var = 0; //靜態局部變量
printf(" var equal %d\n",var);
printf(" static var equal %d\n",static_var);
printf("\n");
var++;
static_var++;
}
int main()
{
int i;
for(i = 0;i < 3;i++)
{
fun();
}
return 0;
}
`
總結
以上是生活随笔為你收集整理的关于静态局部全局变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构基础概念及算法概念
- 下一篇: JDK,JRE和JVM三者的关系以及ja