歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言static用法

C語言static用法

日期:2017/3/1 9:46:26   编辑:Linux編程

每天拾一個C語言貝殼,厚積薄發,積跬步以致千裡。

今日貝殼:C語言static的用法與static修飾變量的空間存儲特征。

要點: static在C中主要有兩個作用,一修飾作用域;二修飾生存期

1.static修飾全局變量:修飾作用域

static修飾的靜態全局變量與普通全局變量唯一的區別是:靜態全局變量僅在此源文件中有效,不能被其他源文件引用。該全局變量的作用域被限定在此源文件。

2.static修飾函數:修飾作用域。

static修飾的函數,作用域僅在此源文件,不能在其他源文件中調用。該函數的作用域被限定在此源文件。

static1.c

//******* //file1.c文件代碼如下 //******* static int n = 10; //靜態全局變量 static void foo() //靜態函數 { printf("Hello world !"); } .... //******* //file2.c //******* extern int n; //extern聲明使用file1中的n,引發錯誤,因為n為static靜態全局變量 //如果n未用static修飾,通過extern可引用file1.c中的n extern void foo(); //同上,引發錯誤,靜態函數作用僅在其源文件內 ....

3.static修飾局部變量:修飾生存期

static修飾的靜態局部變量,同普通局部變量的區別:

•靜態局部變量存儲在靜態區,普通局部變量存儲在棧區。

•靜態局部變量未初始化時,系統自動置0;初始化僅在函數初次調用時進行一次。

•靜態局部變量在函數結束時不會釋放,其生存期為整個程序運行期,並能保存上次調用的值。

static2.c

#include<stdio.h> void foo() { static int counter=0; //僅在初次調用foo()時初始化 printf("counter:%d",counter); counter++; } int main() { foo(); //第一次調用foo(),counter輸出0 foo(); //第二次調用foo(),counter輸出1 return 0; }

去掉static再運行一下程序,結果不同。

Copyright © Linux教程網 All Rights Reserved