日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于静态局部全局变量

發(fā)布時(shí)間:2024/10/14 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于静态局部全局变量 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. 全局變量
全局變量是在所有函數(shù)體的外部定義的,程序的所有部分(其他文件的代碼)都可以使用。全局變量不受作用域的影響。全局變量的生命周期一直到程序的結(jié)束,全局變量是靜態(tài)存儲(chǔ)方式。

例:

#include <stdio.h>
#include <stdlib.h>

/* a 就是一個(gè)全局變量*/
int a = 2;

int main(int argc, char *argv[]) {
printf(“int 存儲(chǔ)大小 : %d \n”, a);
return 0;
}
如果在一個(gè)文件中使用extern關(guān)鍵字來(lái)聲明另一個(gè)文件中存在的全局變量,那么這個(gè)文件可以使用這個(gè)變量。

例:

在a.c中定義一個(gè)全局變量

#include <stdio.h>
#include <stdlib.h>

int a = 3;/定義在a.c文件中的全局變量a/
在main.c中使用extern關(guān)鍵字引用a.c中的全局變量a

#include <stdio.h>
#include <stdlib.h>

/* 使用extern管金子引用a.c中的全局變量a*/
extern int a;

int main(int argc, char *argv[]) {
printf(“int 存儲(chǔ)大小 : %d \n”, a);
return 0;
}
二.局部變量
局部變量出現(xiàn)在一個(gè)作用域內(nèi),它們是局限于一個(gè)函數(shù)的。局部變量經(jīng)常被稱為自動(dòng)變量,因?yàn)樗鼈冊(cè)谶M(jìn)入作用域時(shí),自動(dòng)生成,離開(kāi)作用域時(shí)自動(dòng)消失。關(guān)鍵字auto可以顯示的說(shuō)明這個(gè)問(wèn)題,但局部變量默認(rèn)為auto,所以沒(méi)必要聲明為auto。通常函數(shù)里定義的變量,函數(shù)的參數(shù)都局部變量。所以一般需要在某個(gè)函數(shù)里,返回?cái)?shù)組的地址或者指針之類,這時(shí)候必須定義成static,或者動(dòng)態(tài)申請(qǐng)內(nèi)存,這樣函數(shù)結(jié)束返回時(shí)才不會(huì)釋放掉那塊內(nèi)存空間。

寄存器變量也是一種局部變量。register來(lái)修飾,就是告訴編譯器盡可能快的訪問(wèn)這個(gè)變量,通過(guò)存放在寄存器中來(lái)實(shí)現(xiàn)快速訪問(wèn)。

三.靜態(tài)變量
靜態(tài)變量的修飾關(guān)鍵字是static,static可以作用于變量以及函數(shù)。由static修飾的,可分為靜態(tài)局部變量,靜態(tài)全局變量,靜態(tài)函數(shù)。靜態(tài)變量的生命期和程序生命期是一樣的,在程序結(jié)束之后操作系統(tǒng)會(huì)回收空間。 靜態(tài)變量當(dāng)然是屬于靜態(tài)存儲(chǔ)方式,但是屬于靜態(tài)存儲(chǔ)方式的量不一定就是靜態(tài)變量。 例如外部變量雖屬于靜態(tài)存儲(chǔ)方式,但不一定是靜態(tài)變量,必須由 static加以定義后才能成為靜態(tài)外部變量,或稱靜態(tài)全局變量

1.靜態(tài)局部變量

在局部變量前面加上static后,就定義了靜態(tài)局部變量,靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)方式,靜態(tài)局部變量只會(huì)被初始化一次,下次使用依據(jù)上一次保存的值。它具有以下特點(diǎn):
(1) 靜態(tài)局部變量在函數(shù)內(nèi)定義 ,它的生存期為整個(gè)源程序,但是其作用域仍與自動(dòng)變量相同,只能在定義該變量的函數(shù)內(nèi)使用該變量。退出該函數(shù)后, 盡管該變量還繼續(xù)存在,但不能使用它。(作用域不變,生存周期變了)

(2) 允許對(duì)構(gòu)造類靜態(tài)局部量賦初值 ,例如數(shù)組,若未賦以初值,則由系統(tǒng)自動(dòng)賦以0值。(而非靜態(tài)局部變量未賦初始值,系統(tǒng)會(huì)給個(gè)隨機(jī)值)
(3) 對(duì)基本類型的靜態(tài)局部變量,若在說(shuō)明時(shí)未賦以初值,則系統(tǒng)自動(dòng)賦予0值。而對(duì)自動(dòng)變量沒(méi)有賦初值,則其值是隨機(jī)值。

靜態(tài)局部變量是一種生存期為整個(gè)源程序的量。雖然離開(kāi)定義它的函數(shù)后不能使用,但如再次調(diào)用定義它的函數(shù)時(shí),它又可繼續(xù)使用, 而且保存了上次被調(diào)用后留下的值。 因此,當(dāng)多次調(diào)用一個(gè)函數(shù)且要求在調(diào)用之間保留某些變量的值時(shí),可考慮采用靜態(tài)局部變量。雖然用全局變量也可以達(dá)到上述目的,但全局變量有時(shí)會(huì)造成意外的副作用,因此仍以采用局部靜態(tài)變量為宜。

2.靜態(tài)全局變量

全局變量(外部變量)的說(shuō)明之前再加static 就構(gòu)成了靜態(tài)全局變量。static全局變量只初使化一次,防止在其他文件單元中被引用。全局變量本身就是靜態(tài)存儲(chǔ)方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。 這兩者在存儲(chǔ)方式上并無(wú)不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序, 當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯(cuò)誤。

四.常量
常量是固定值,在程序執(zhí)行期間不會(huì)改變。這些固定的值,又叫做字面量。

常量可以是任何的基本數(shù)據(jù)類型,比如整數(shù)常量、浮點(diǎn)常量、字符常量,或字符串字面值,也有枚舉常量。

常量就像是常規(guī)的變量,只不過(guò)常量的值在定義后不能進(jìn)行修改。

定義常量
在 C 中,有兩種簡(jiǎn)單的定義常量的方式:

使用 #define 預(yù)處理器。
使用 const 關(guān)鍵字。
#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;
}

  • `/*接下來(lái)對(duì)靜態(tài)局部變量的理解
    【程序41】題目:學(xué)習(xí)static定義靜態(tài)變量的用法  
    static有兩種用法:面向過(guò)程程序設(shè)計(jì)中的static
    面向?qū)ο蟪绦蛟O(shè)計(jì)中的static
    這里的是:面向過(guò)程
    靜態(tài)全局變量:在全局變量前,加上關(guān)鍵字static,該變量就被定義成為一個(gè)靜態(tài)全局變量。
    靜態(tài)局部變量:在局部變量前,加上關(guān)鍵字static,該變量就被定義成為一個(gè)靜態(tài)局部變量。
    靜態(tài)函數(shù):在函數(shù)的返回類型前加上static關(guān)鍵字,函數(shù)即被定義為靜態(tài)函數(shù)。
    靜態(tài)函數(shù)與普通函數(shù)不同,它只能在聲明它的文件當(dāng)中可見(jiàn),不能被其它文件使用。
    */
  • #include <stdio.h>

    void fun()
    {
    int var = 0;
    static int static_var = 0; //靜態(tài)局部變量
    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;
    }
    `

    總結(jié)

    以上是生活随笔為你收集整理的关于静态局部全局变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。