C語言中static的使用介紹

1.static 可以修飾局部變量

首先讓我看看這段代碼

#include<stdio.h>
void test()
{
	int a = 1;
	a = a + 1;
	printf("%d", a);
}
int main()
{
	int i = 0;
	while (i < 10)
	{
		test();
		i++;
	}
	return 0;
}

你認為輸出的結果是什麼呢?

那為什麼結果是2222222222呢

因為局部變量 a 進入這個范圍創建  出瞭這個范圍銷毀   所以結果都是2

當我們加上static 的結果又會是什麼

那為什麼加上 static 結果就不一樣瞭

我們研究一下static的使用原理

我們的內存分為三大類

我們的局部變量放在棧區  

而static把a放在瞭靜態區   而在靜態區的變量 出瞭他的范圍是不銷毀的

我們對比一下 可能更加直觀

 所以 static 修飾局部變量的時候,其實改變的是局部變量得存儲位置

靜態得局部變量是放在靜態區,放在靜態區的變量出瞭作用域是不會銷毀的,相當於生命周期延長瞭。

 補充   變量的作用域是不變的,隻是生命周期延長瞭

2. static 可以修飾全局變量

我們再創建一個源文件 

   全局變量的作用域是整個工程

如果我們想引用另一個源文件的函數     這裡我們不得不說 extern 這個關鍵字

如圖

  static 可以修飾全局變量  如果我們再全局變量前 加上static會是什麼結果呢

此時就會報錯  

一個全局變量具有外部鏈接屬性的 (就是可以被其他源文件引用)但是被static 修飾後外部鏈接屬性就變成瞭內部鏈接屬性 隻能在自己所在的源文件內部使用不能在其他文件內部使用

所以再次調試的時候就會報錯

那 static 修飾的全局變量的本質是  外部鏈接屬性發生改變   而不是他的作用域變小

static 修飾全局變量的意義是  如果你定義瞭一個全局變量  別人用 extern 就可以隨便使用  

如果你不想讓別人看  就可以用static . 

3.static 可以修飾函數

我們用另一個源文件創建一個函數  如圖

用 關鍵字extern 聲明後  調試結果

這裡我們在函數前加上static 又會是什麼結果呢 

  其實一個函數本身具有外部鏈接屬性  被static修飾後 外部鏈接屬性變成瞭內部鏈接屬性  隻能在源2.c 內部使用 其他源文件無法使用    使用上感覺作用域變小

我們可以發現 static 修飾全局變量和修飾函數用法一樣   

總結

當我們使用一個局部變量  出瞭他的范圍 不希望他被銷毀下次進來之後還在 那我們就可以拿static 修飾 

當我們希望一個全部變量 在他自己源文件使用 任意其他地方不想讓別人看到 也可以用static修飾

當我們寫的函數隻是自己用一下 不希望別人引用 則也可以用static修

到此這篇關於C語言中static的使用介紹的文章就介紹到這瞭,更多相關C語言static內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: