最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中static的使用方法實(shí)例詳解

 更新時(shí)間:2022年07月29日 10:31:15   作者:happy_child_  
static一般用于修飾局部變量,全局變量,函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中static用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

static關(guān)鍵字不僅可以用來修飾變量,還可以用來修飾函數(shù)。在使用static關(guān)鍵字修飾變量時(shí),我們稱此變量為靜態(tài)變量。靜態(tài)變量的存儲(chǔ)方式與全局變量一樣,都是靜態(tài)存儲(chǔ)方式。靜態(tài)變量屬于靜態(tài)存儲(chǔ)方式,屬于靜態(tài)存儲(chǔ)方式的變量卻不一定就是靜態(tài)變量。

一、static修飾變量

1.修飾局部變量

先看段代碼:

#include <stdio.h>
void test()
{
	int m = 0;
	m = m + 1;
	printf("%d", m);
}

int main()
{
	int n = 0;
	while (n < 10)
	{
		test();
		n++;
	}
}

輸出結(jié)果:

這個(gè)結(jié)果沒問題,下面咱們加個(gè)static對(duì)比一下:

#include <stdio.h>
void test()
{
	static int m = 0;
	m = m + 1;
	printf("%d", m);
}

int main()
{
	int n = 0;
	while (n < 10)
	{
		test();
		n++;
	}
	return 0;
}

輸出結(jié)果:

static 修飾局部變量的時(shí)候,其實(shí)改變的是局部變量的存儲(chǔ)位置,靜態(tài)的局部變量是放在靜態(tài)區(qū),放在靜態(tài)區(qū)的變量出了作用域是不會(huì)銷毀的,相當(dāng)于生命周期延長(zhǎng)了。

注:變量的作用域是不變的,只是生命周期延長(zhǎng)了。

2.修飾全局變量

創(chuàng)建一個(gè)源文件:a.c

int g_val=2022;//全局變量

引用全局變量:全局變量的作用域是整個(gè)工程

#include <stdio.h>
extern g_val;//extern 用來聲明外部命令
int main()
{
	printf("%d\n", g_val);
	return 0;
}

輸出結(jié)果:

static可以修飾全局變量,加上static看一下有什么不同:

static int g_val = 2022;//全局變量

主文件不變:

#include <stdio.h>
extern g_val;//extern 用來聲明外部命令
int main()
{
	printf("%d\n", g_val);
	return 0;
}

輸出結(jié)果:

此時(shí)會(huì)報(bào)錯(cuò):一個(gè)全局變量具有外部鏈接屬性的 (就是可以被其他源文件引用)但是被static 修飾后外部鏈接屬性就變成了內(nèi)部鏈接屬性 只能在自己所在的源文件內(nèi)部使用不能在其他文件內(nèi)部使用.

所以再次調(diào)試的時(shí)候就會(huì)報(bào)錯(cuò)

二、static修飾函數(shù)

源文件a.c中創(chuàng)建個(gè)函數(shù)名為add:

代碼如下:

static int add(int x, int y)
{
	int z = x + y;
	return z;
 }

主文件test.c如下:

extern add(int x, int y);
int main()
{
	int a = 2;
	int b = 3;
	int c = add(a, b);
	printf("%d\n", c);
	return 0;
}

輸出結(jié)果:

其實(shí)一個(gè)函數(shù)本身具有外部鏈接屬性 被static修飾后外部鏈接屬性變成了內(nèi)部鏈接屬性 ,只能在源文件a.c 內(nèi)部使用了,其他源文件無法使用,使用上感覺作用域變小,我們可以發(fā)現(xiàn) static 修飾全局變量和修飾函數(shù)用法一樣 。

總結(jié) 在修飾變量的時(shí), static修飾的靜態(tài)局部變量只執(zhí)行一次,而且延長(zhǎng)了局部變量的生命周期,直到程序運(yùn)行結(jié)束以后才釋放。static修飾全局變量的時(shí),這個(gè)全局變量只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。static修飾一個(gè)函數(shù),則這個(gè)函數(shù)的只能在本文件中調(diào)用,不能被其他文件調(diào)用。Static修飾的局部變量存放在全局?jǐn)?shù)據(jù)區(qū)的靜態(tài)變量區(qū)。

補(bǔ)充:static的好處是什么?

1、隱藏變量或函數(shù)、隔離錯(cuò)誤,有利于模塊化程序

在編程中,難免會(huì)用到全局變量,全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),全局變量在所有的源文件中都是有效的。如果希望全局變量?jī)H限于在本源文件中使用,在其他源文件中不能引用,也就是說限制其作用域只在定義該變量的源文件內(nèi)有效,而在同一源程序的其他源文件中不能使用,這時(shí),就可以通過在全局變量上加static來實(shí)現(xiàn),使全局變量被定義成一個(gè)靜態(tài)全局變量。這樣就可以避免其他源文件使用該變量、避免其他源文件因?yàn)樵撟兞恳鸬腻e(cuò)誤。起到了對(duì)其他源文件隱藏該變量和隔離錯(cuò)誤的作用,有利于模塊化程序。

2、保持變量?jī)?nèi)容的持久性

 有時(shí)候,我們希望函數(shù)中局部變量的值在函數(shù)調(diào)用結(jié)束之后不會(huì)消失,仍然保留函數(shù)調(diào)用結(jié)束的值。即它所在的存儲(chǔ)單元不釋放。這時(shí),應(yīng)該將該局部變量用關(guān)關(guān)鍵字static聲明為靜態(tài)局部變量。當(dāng)局部變量被聲明為靜態(tài)局部變量的時(shí)候,也就改變了局部變量的存儲(chǔ)位置,從原來的棧中存放改為靜態(tài)存儲(chǔ)區(qū)存放,全局變量也存放在靜態(tài)存儲(chǔ)區(qū),靜態(tài)局部變量與全局變量的主要區(qū)別就在于可見性,靜態(tài)局部變量只在其被聲明的代碼塊中是可見的。

總結(jié)

到此這篇關(guān)于C語言中static使用的文章就介紹到這了,更多相關(guān)C語言static用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言編程中函數(shù)的基本學(xué)習(xí)教程

    C語言編程中函數(shù)的基本學(xué)習(xí)教程

    這篇文章主要介紹了C語言編程中函數(shù)的基本學(xué)習(xí)教程,其中著重講到了傳值調(diào)用與參數(shù),需要的朋友可以參考下
    2015-12-12
  • 解析Linux下C++編譯和鏈接

    解析Linux下C++編譯和鏈接

    編譯&鏈接對(duì)C&C++程序員既熟悉又陌生,熟悉在于每份代碼都要經(jīng)歷編譯&鏈接過程,陌生在于大部分人并不會(huì)刻意關(guān)注編譯&鏈接的原理。本文通過開發(fā)過程中碰到的四個(gè)典型問題來探索64位linux下C++編譯&鏈接的那些事。
    2021-05-05
  • C++類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    C++類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換是面向?qū)ο缶幊讨刑幚眍愋椭g轉(zhuǎn)換的兩種重要機(jī)制,本文就來介紹一下這兩種方法的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • C語言JNI的動(dòng)態(tài)注冊(cè)詳解

    C語言JNI的動(dòng)態(tài)注冊(cè)詳解

    這篇文章主要介紹了JAVA JNI的動(dòng)態(tài)注冊(cè),這里提供簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下,小編覺得寫的還不錯(cuò),希望能給你帶來幫助
    2021-08-08
  • C++ vector容器縮小capacity問題

    C++ vector容器縮小capacity問題

    這篇文章主要介紹了C++ vector容器縮小capacity問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn)

    C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn)

    這篇文章主要介紹了C++實(shí)現(xiàn)猜數(shù)小游戲的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++ vtordisp的應(yīng)用場(chǎng)景分析

    C++ vtordisp的應(yīng)用場(chǎng)景分析

    文章介紹了C++中的vtordisp機(jī)制,用于在虛繼承和虛函數(shù)結(jié)合的場(chǎng)景下,確保構(gòu)造函數(shù)和析構(gòu)函數(shù)中對(duì)虛基類指針的正確調(diào)整,文章詳細(xì)解釋了vtordisp的基本概念、應(yīng)用場(chǎng)景以及編譯器相關(guān)的考慮,感興趣的朋友一起看看吧
    2025-01-01
  • Qt使用OpenGL實(shí)現(xiàn)繪制3D圖形

    Qt使用OpenGL實(shí)現(xiàn)繪制3D圖形

    OpenGL是一個(gè)跨平臺(tái)的、用來渲染3D圖形的標(biāo)準(zhǔn)API,Qt對(duì)OpenGL提供了強(qiáng)大的支持,所以本文就來和大家介紹一下Qt如何使用OpenGL實(shí)現(xiàn)繪制3D圖形吧
    2023-10-10
  • C++ getcwd函數(shù)獲取項(xiàng)目運(yùn)行路徑方法詳解

    C++ getcwd函數(shù)獲取項(xiàng)目運(yùn)行路徑方法詳解

    在Linux下做QT項(xiàng)目時(shí),需要獲取項(xiàng)目的運(yùn)行路徑,于是用getcwd函數(shù)進(jìn)行獲取,然后在Windows下進(jìn)行測(cè)試,發(fā)現(xiàn)獲取到的是程序的項(xiàng)目路徑,即代碼文件路徑,然后再Linux QT中測(cè)試,獲取到的又是運(yùn)行路徑,這就很納悶了。經(jīng)過再三測(cè)試,終于發(fā)現(xiàn)了原因
    2022-10-10
  • C語言實(shí)現(xiàn)五子棋對(duì)戰(zhàn)系統(tǒng)

    C語言實(shí)現(xiàn)五子棋對(duì)戰(zhàn)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)五子棋對(duì)戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論

兴宁市| 张掖市| 金塔县| 仙桃市| 柳林县| 博乐市| 包头市| 内江市| 宣化县| 万年县| 茶陵县| 桐柏县| 若尔盖县| 油尖旺区| 滨海县| 共和县| 东兴市| 罗山县| 天气| 英吉沙县| 滦南县| 兴海县| 临夏市| 深泽县| 仁怀市| 广河县| 上高县| 商南县| 苍溪县| 桦川县| 舒兰市| 舞阳县| 包头市| 定兴县| 玉林市| 谢通门县| 兴义市| 平湖市| 旌德县| 岳池县| 嘉禾县|