tft每日頭條

 > 生活

 > 在c語言中關于變量的作用域

在c語言中關于變量的作用域

生活 更新时间:2024-11-20 16:25:24

在c語言中關于變量的作用域?靜态變量(static-variable)聽起來自相矛盾,像是一個不可變的變量,我來為大家講解一下關于在c語言中關于變量的作用域?跟着小編一起來看一看吧!

在c語言中關于變量的作用域(C語言的塊作用域的靜态變量)1

在c語言中關于變量的作用域

靜态變量(static-variable)聽起來自相矛盾,像是一個不可變的變量。

實際上,靜态的意思是該變量在内存中原地不動,并不是說它的值不變。具有文件作用域的變量自動具有(也必須是)靜态存儲期。前面提到過,可以創建具有靜态存儲期、塊作用域的局部變量。這些變量和自動變量一樣,具有相同的作用域,但是程序離開它們所在的函數後,這些變量不會消失。也就是說,這種變量具有塊作用域、無鍊接,但是具有靜态存儲期。計算機在多次函數調用之間會記錄它們的值。在塊中(提供塊作用域和無鍊接)以存儲類别說明符static(提供靜态存儲期)聲明這種變量。程序清單12.3演示了一個這樣的例子。

/* loc_stat.c -- using a local static variable */ #include <stdio.h> void trystat(void); int main(void) { int count; for (count = 1; count <= 3; count ) { printf("Here comes iteration %d:n", count); trystat(); } return 0; } void trystat(void) { int fade = 1; static int stay = 1; printf("fade = %d and stay = %dn", fade , stay ); }

注意,trystat()函數先打印再遞增變量的值。該程序的輸出如下:

Here comes iteration 1: fade = 1 and stay = 1 Here comes iteration 2: fade = 1 and stay = 2 Here comes iteration 3: fade = 1 and stay = 3

靜态變量stay保存了它被遞增1後的值,但是fade變量每次都是1。這表明了初始化的不同:每次調用trystat()都會初始化fade,但是stay隻在編譯trystat()時被初始化一次。如果未顯式初始化靜态變量,它們會被初始化為0。

下面兩個聲明很相似:

int fade = 1; static int stay = 1;

第1條聲明确實是trystat()函數的一部分,每次調用該函數時都會執行這條聲明。這是運行時行為。第2條聲明實際上并不是trystat()函數的一部分。如果逐步調試該程序會發現,程序似乎跳過了這條聲明。這是因為靜态變量和外部變量在程序被載入内存時已執行完畢。把這條聲明放在trystat()函數中是為了告訴編譯器隻有trystat()函數才能看到該變量。這條聲明并未在運行時執行。

不能在函數的形參中使用static:

int wontwork(static int flu);// not allowed

“局部靜态變量”是描述具有塊作用域的靜态變量的另一個術語。閱讀一些老的C文獻時會發現,這種存儲類别被稱為内部靜态存儲類别(internal static storage class)。這裡的内部指的是函數内部,而非内部鍊接。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved